Я собираю библиотеку с помощью SCons.
Имя файла библиотеки, с которой я хочу связать, не начинается с обычного префикса "lib".
Я прочиталld Документация и проверьте в моей консоли, работающей с GCC, что, если я поставлю -l:filename.so
, библиотека с именем "filename.so" будет найдена по указанным путям библиотек.
Когда я пробую это решение в моем файле SConscript,очевидно, Scons держит двоеточие перед именем библиотеки, но удаляет часть «.so», поэтому библиотека не может быть найдена, поскольку ее имя файла содержит расширение .so.
Обновление: краткий пример.
env = Environment()
hello = env.Program(["hello.cc"], LIBPATH=['.'], LIBS=[':kntlm.so'])
Этот скрипт Scons пытается скомпилировать исходный код "hello.cc" (только Hello World, без использования какой-либо библиотеки).В тот же каталог я скопировал, только для этого примера, библиотеку из моей системы.Я назвал его "kntlm.so" вместо его настоящего имени (libkntlm.so).
Из терминала я могу запустить это:
g++ -o hello hello.o -L. -l:kntlm.so
И GCC компилирует его без проблем.
Если я пытаюсь запустить Scons, я получаю следующее:
$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o hello hello.o -L. -l:kntlm
/usr/bin/x86_64-linux-gnu-ld: cannot find -l:kntlm
collect2: error: ld returned 1 exit status
scons: *** [hello] Error 1
scons: building terminated because of errors.
Как вы можете видеть, GCC, который выполняли Scons, включает "-l: kntlm", но он удален".so" с конца, поэтому файл библиотеки не может быть найден
Вы знаете, как я могу указать имя файла для библиотеки вместо этой странной замены?
Заранее спасибо