Используя bjam в Ubuntu, я создаю разделяемую библиотеку c ++ и пытаюсь использовать ее в исполняемом файле. Я должен построить как общий, так как он не будет ссылаться как статический (возникает много неопределенных ссылок). Это хорошо.
Две связанные проблемы:
1) Используя иерархию Jamfiles, мой exe-проект (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 моего проекта (с помощью команды final install) Однако, если я запускаю 'bjam test', то создаются testServerHub и pythonManager, но libpythonManager.so не копируется в папку lib проекта - команда установки не запускается!
2) Хорошо, для временного решения я сначала создаю libpythonManager.so, а затем создаю исполняемый файл testServerHub. И компиляция и ссылка. Во время выполнения исполняемый файл жалуется на невозможность найти libpythonManager.so. Не удивительно, так как компоновщик времени выполнения не знает о моей папке lib проекта. Как мне сказать, чтобы искать в определенном каталоге для общих библиотек? или как мне установить libpythonManager.so в / usr / local / lib, если команда установки не влияет на сборки зависимых библиотек?
Большое спасибо
Si