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

时间:2018-05-07 19:52:07

标签: ruby binding swig ff

假设我使用命令

编译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]

1 个答案:

答案 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作为链接器。