使用bjam构建和使用共享库

时间:2010-01-22 08:53:44

标签: linux gcc ubuntu bjam boost-build

在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

1 个答案:

答案 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作为参考。