假设我使用命令
编译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]
答案 0 :(得分:0)
在这里几乎不了解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 ++编译器)和来自{{1的链接器标志}} 按照惯例。
您从clang看到的错误消息表明它被称为编译器,并告诉您在编译(而不是链接)时它会忽略您给出的仅适用于链接的额外选项。 / p>
您可能会或可能不需要删除我在此处完成的LDFLAGS
部分论据 - 决定取决于您是否正在调用链接器(/ usr / bin) / ld通常)直接,或使用clang / gcc作为链接器。