Используя bjam в Ubuntu, я создаю общую библиотеку С++ и пытаюсь использовать ее в исполняемом файле. Я должен построить как общий, так как он не будет ссылаться как статический (возникает много неопределенных ссылок). Хорошо.
Две связанные проблемы:
1) Используя иерархию Jamfiles, мой исполняемый проект (testServerHub) зависит от общей библиотеки (pythonManager). Вот Jamfile для exe:
echo "Compiling serverHub//test" ;
# declare project name
project serverHub//testServerHub
: build-dir ../_gcc/intermediate
;
# build unit-test using these source files, dependent libraries and settings
exe testServerHub
: # Source
..\\..\\..\\common\\0_8_1\\test\\runner.cpp
successfulTest.cpp
# Dependent libraries by path and project name
../controller/pythonManager//pythonManager
/boost//unit_test_framework
: # Settings
<link>shared
;
install ..\\bin : testServerHub ;
И вот мой lib Jamfile:
echo "Compiling serverHub/controller//pythonManager" ;
# declare project name
project serverHub/controller//pythonManager
: requirements
<define>URTH_SERVERHUB
: build-dir ../../_gcc/intermediate
;
# build library using these source files and settings
lib pythonManager
: ../../../../common/0_8_1/controller/pythonManager/pythonManager.cpp
../../../../common/0_8_1/controller/pythonManager/cppInterfaceBase.cpp
cppInterfaceServerHub.cpp
/boost/python//boost_python
/user-config//python
: <link>shared
;
# copy and rename
install ../../lib : pythonManager ;
Если я запускаю «bjam pythonManager», общая библиотека pythonManager создается и копируется в папку lib моего проекта (с помощью окончательной команды установки). Однако, если я запускаю «bjam test», создаются и testServerHub, и pythonManager, но libpythonManager.so не копируется в папку lib проекта — команда установки не запускается!
2) Итак, в качестве временного обходного пути я сначала создаю libpythonManager.so, а затем собираю исполняемый файл testServerHub. И скомпилируй, и линкуй. Во время выполнения исполняемый файл жалуется, что не может найти libpythonManager.so. Неудивительно, поскольку компоновщик времени выполнения не знает о моей папке lib проекта. Как мне сказать ему искать общие библиотеки в определенном каталоге? или как мне установить libpythonManager.so в /usr/local/lib, если команда установки не влияет на сборку зависимых библиотек?
Спасибо большое
Si