gpt4 book ai didi

ruby - 如何在 extconf.rb 中为 SWIG 正确包含库路径和其他标志?

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:50 24 4
gpt4 key购买 nike

假设我要用命令编译一个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 作为链接器。

关于ruby - 如何在 extconf.rb 中为 SWIG 正确包含库路径和其他标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50221476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com