سؤال

باستخدام 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 ; 

وهنا هو بلدي jamfile lib:

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" ، فسيتم بناء كل من TestServerHub و Pythonmanager ، ولكن لم يتم نسخ libpythonmanager.so إلى مجلد Lib Project - قيادة التثبيت لا يتم تشغيلها!

2) حسنًا ، كحل مؤقت ، أقوم ببناء libpythonmanager.So أولاً ثم بناء TestServerHub قابلة للتنفيذ. كلا التجميع والرابط. في وقت التشغيل ، يشكو القابل للتنفيذ من عدم القدرة على العثور على libpythonmanager.so. ليست مفاجأة كبيرة لأن رابط وقت التشغيل لا يعرف عن مجلد مشروع LIB الخاص بي. كيف أخبرها أن أنظر في دليل معين للمكتبات المشتركة؟ أو كيف أقوم بتثبيت libpythonmanager.so في/usr/local/lib إذا لم يكن لأمر التثبيت أي تأثير على بناء المكتبة المعتمدة؟

شكراً جزيلاً

سي

هل كانت مفيدة؟

المحلول

أعتقد أنه يمكنك استخدامه <install-dependencies>on في exe jamfile ، مثل في

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

سيؤدي ذلك إلى تثبيت جميع المكتبات (LIB) التي يعتمد عليها EXE.

انظر على سبيل المثال http://www.boost.org/doc/tools/build/doc/html/bbv2/tasks/installing.html كمرجع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top