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

问题描述 投票:4回答:1

假设我用命令编译一个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 binding swig ff
1个回答
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 ++编译器)和来自LDFLAGS的链接器标志。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.