Как правильно включить путь к библиотеке и другие флаги в extconf.rb для SWIG? - PullRequest
0 голосов
/ 07 мая 2018

Предположим, мне нужно было скомпилировать файл C командой

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

Как определить файл extconf.rb в SWIG, чтобы он не игнорировал пути компоновщика?
Это мой текущий файл 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 голосов
/ 16 мая 2018

Почти ничего не зная о 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 в качестве компоновщика.

...