Сборка и использование общих библиотек с bjam - PullRequest
1 голос
/ 22 января 2010

Используя 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

1 Ответ

1 голос
/ 10 февраля 2010

Я думаю, что вы можете использовать <install-dependencies>on в exe Jamfile, как в

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

При этом будут установлены все библиотеки (LIB), от которых зависит исполняемый файл.

См., Например, http://www.boost.org/doc/tools/build/doc/html/bbv2/tasks/installing.html в качестве ссылки.

...