在ubuntu上使用bjam,我正在构建一个c ++共享库并尝试在可执行文件中使用它。我必须构建为共享,因为它不会链接为静态(许多未定义的引用出现)。太好了。
两个相关问题:
1)使用Jamfiles的heirarchy,我的exe项目(testServerHub)依赖于共享库(pythonManager)。这是exe的Jamfile:
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文件夹 - install命令不会运行!
2)好的,作为临时解决方法,我首先构建libpythonManager.so,然后构建testServerHub可执行文件。编译和链接。在运行时,可执行文件抱怨无法找到libpythonManager.so。由于运行时链接器不知道我的项目lib文件夹,因此不是一个惊喜。如何告诉它在某个目录中查找共享库?或者,如果install命令对依赖库构建没有影响,如何将libpythonManager.so安装到/ usr / local / lib中?
非常感谢
的Si
答案 0 :(得分:1)
我认为你可以在exe文件中使用<install-dependencies>on
,就像在
install ..\\bin : testServerHub : <install-dependencies>on <install-type>LIB ;
这将安装exe所依赖的所有库(LIB)。
参见例如http://www.boost.org/doc/tools/build/doc/html/bbv2/tasks/installing.html作为参考。