1

ubuntuでbjamを使用して、c ++共有ライブラリを構築し、実行可能ファイルで使用しようとしています。静的としてリンクされないため、共有としてビルドする必要があります(未定義の参照が多数発生します)。それはいいです。

2つの関連する問題:

1)Jamfilesの階層を使用して、私の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フォルダーにコピーされません。インストールコマンドは実行されません。

2)さて、一時的な回避策として、最初にlibpythonManager.soをビルドしてから、testServerHub実行可能ファイルをビルドします。コンパイルとリンクの両方。実行時に、実行可能ファイルはlibpythonManager.soを見つけることができないことについて文句を言います。ランタイムリンカーは私のプロジェクトのlibフォルダーを知らないので、それほど驚くことではありません。共有ライブラリの特定のディレクトリを検索するように指示するにはどうすればよいですか?または、インストールコマンドが依存ライブラリのビルドに影響を与えない場合、libpythonManager.soを/ usr / local / libにインストールするにはどうすればよいですか?

どうもありがとうございます

Si

4

1 に答える 1

1

私はあなたが<install-dependencies>onのようにexeJamfileで使用できると思います

install ..\\bin : testServerHub : <install-dependencies>on <install-type>LIB ;

これにより、exeが依存するすべてのライブラリ(LIB)がインストールされます。

参照として、たとえばhttp://www.boost.org/doc/tools/build/doc/html/bbv2/tasks/installing.htmlを参照してください。

于 2010-02-10T17:59:16.770 に答える