如何在SWCON的extconf.rb中正确包含库路径和其他标志?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SWCON的extconf.rb中正确包含库路径和其他标志?相关的知识,希望对你有一定的参考价值。

假设我用命令编译一个C文件

g++ a.cpp  -I/usr/local/gr/include -L/usr/local/gr/lib -lGR -lm -Wl,-rpath,/usr/local/gr/lib

我如何在SWIG中定义extconf.rb文件,以便它不会忽略链接器路径? 这是我当前的extconf.rb文件。

require 'mkmf'
system('swig -c++ -ruby example.i') or abort
$CXXFLAGS += " -I/usr/local/gr/include -L/usr/local/gr/lib -lGR -lm -Wl,-rpath,/usr/local/gr/lib "
create_makefile('example')

它会忽略带有错误的链接器标志

clang: warning: -lGR: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: -Wl,-rpath,/usr/local/gr/lib: 'linker' input unused [-Wunused-command-line-argument]
clang: warning: argument unused during compilation: '-L/usr/local/gr/lib' [-Wunused-command-line-argument]
答案

在这里几乎不了解ruby或构建系统似乎你想要改变它是这样的:

require 'mkmf'
system('swig -c++ -ruby example.i') or abort
$CXXFLAGS += " -I/usr/local/gr/include "
$LDFLAGS += " -L/usr/local/gr/lib -lGR -lm -rpath,/usr/local/gr/lib "

create_makefile('example')

因为通常构建系统将编译和链接分成两个独立的阶段,编译标志来自名为CCFLAGS / CXXFLAGS的变量(分别用于C和C ++编译器)和来自LDFLAGS的链接器标志。

您从clang中看到的错误消息表明它被称为编译器,并告诉您在编译(而不是链接)时它会忽略您给出的仅适用于链接的额外选项。

您可能会或可能不需要删除参数的-Wl部分,因为我在这里做了 - 决定是否取决于您是直接调用链接器(/ usr / bin / ld)还是使用clang / gcc作为链接器。

以上是关于如何在SWCON的extconf.rb中正确包含库路径和其他标志?的主要内容,如果未能解决你的问题,请参考以下文章

openSUSE 安装compass,mkmf.rb can't find,checking for ffi.h...extconf.rb failed

如何正确包含 codeigniter websocket 库?

CMake项目结构:如何正确地将库合并在一起并将它们包含在多个可执行文件中

如何将http C库正确包含到Android项目中?

如何正确包含来自 NVIDIA C++ 标准库的文件?

如何在 Xamarin.iOS 中正确包装本机 c 库