2010-01-14 15 views
9

इस प्रकार मैं बूस्ट सी ++ पुस्तकालयों संकलित:स्टेटिक संकलित उदाहरण

bjam install variant=release link=static threading=multi runtime-link=static 

कोई त्रुटि नहीं।

#include <boost/thread/thread.hpp> 
#include <iostream> 

#define BOOST_THREAD_NO_LIB 

void hello() { 
    std::cout << "Hello world, I'm a thread!" << std::endl; 
} 

int main(int argc, char* argv[]) { 
    boost::thread thrd(&hello); 
    thrd.join(); 
    return 0; 
} 

का उपयोग करना:: तो फिर मैं निम्नलिखित स्रोत संकलित

g++ -lboost_thread Thread.cpp 

कार्यक्रम संकलित और ठीक भागा क्योंकि बूस्ट पुस्तकालयों /usr/local/lib में पाए जाते हैं।

./a.out: error while loading shared libraries: libboost_thread.so.1.41.0: cannot 
open shared object file: No such file or directory 

मैं Thread.cpp स्थिर बूस्ट को जोड़ने कैसे संकलित है: जब मैं /etc/ld.so.conf.d/libc.conf से /usr/local/lib हटाया मैं निम्न त्रुटि (कोई surpise) भाग गया? मैंने कोशिश की है:

g++ -static -lboost_thread -lpthread Thread.cpp 

मैं निम्नलिखित बूस्ट पुस्तकालयों स्थापित किया है:

ldconfig -v | grep boost 
libboost_unit_test_framework.so.1.41.0 -> libboost_unit_test_framework.so.1.41.0 
libboost_math_tr1f.so.1.41.0 -> libboost_math_tr1f.so.1.41.0 
libboost_prg_exec_monitor.so.1.41.0 -> libboost_prg_exec_monitor.so.1.41.0 
libboost_math_c99.so.1.41.0 -> libboost_math_c99.so.1.41.0 
libboost_regex.so.1.41.0 -> libboost_regex.so.1.41.0 
libboost_signals.so.1.41.0 -> libboost_signals.so.1.41.0 
libboost_python.so.1.41.0 -> libboost_python.so.1.41.0 
libboost_serialization.so.1.41.0 -> libboost_serialization.so.1.41.0 
libboost_graph.so.1.41.0 -> libboost_graph.so.1.41.0 
libboost_date_time.so.1.41.0 -> libboost_date_time.so.1.41.0 
libboost_thread.so.1.41.0 -> libboost_thread.so.1.41.0 
libboost_math_c99l.so.1.41.0 -> libboost_math_c99l.so.1.41.0 
libboost_math_tr1l.so.1.41.0 -> libboost_math_tr1l.so.1.41.0 
libboost_wserialization.so.1.41.0 -> libboost_wserialization.so.1.41.0 
libboost_system.so.1.41.0 -> libboost_system.so.1.41.0 
libboost_math_tr1.so.1.41.0 -> libboost_math_tr1.so.1.41.0 
libboost_math_c99f.so.1.41.0 -> libboost_math_c99f.so.1.41.0 
libboost_wave.so.1.41.0 -> libboost_wave.so.1.41.0 
libboost_filesystem.so.1.41.0 -> libboost_filesystem.so.1.41.0 
libboost_program_options.so.1.41.0 -> libboost_program_options.so.1.41.0 
libboost_program_options.so.1.35.0 -> libboost_program_options.so.1.35.0 
libboost_program_options-mt.so.1.35.0 -> libboost_program_options-mt.so.1.35.0 
libboost_thread-gcc42-mt-1_34_1.so.1.34.1 -> libboost_thread-gcc42-mt-1_34_1.so.1.34.1 

मैं निम्नलिखित संकलन त्रुटियों का सामना करना:

/tmp/ccek8Br2.o: In function `main': 
Thread.cpp:(.text+0x10b): undefined reference to `boost::thread::join()' 
Thread.cpp:(.text+0x119): undefined reference to `boost::thread::~thread()' 
Thread.cpp:(.text+0x140): undefined reference to `boost::thread::~thread()' 
/tmp/ccek8Br2.o: In function `boost::mutex::mutex()': 
Thread.cpp:(.text._ZN5boost5mutexC1Ev[boost::mutex::mutex()]+0x22): undefined reference to `pthread_mutex_init' 
/tmp/ccek8Br2.o: In function `boost::detail::thread_data<void (*)()>::~thread_data()': 
Thread.cpp:(.text._ZN5boost6detail11thread_dataIPFvvEED0Ev[boost::detail::thread_data<void (*)()>::~thread_data()]+0x1c): undefined reference to `boost::detail::thread_data_base::~thread_data_base()' 
/tmp/ccek8Br2.o: In function `boost::detail::thread_data<void (*)()>::~thread_data()': 
Thread.cpp:(.text._ZN5boost6detail11thread_dataIPFvvEED1Ev[boost::detail::thread_data<void (*)()>::~thread_data()]+0x1c): undefined reference to `boost::detail::thread_data_base::~thread_data_base()' 
/tmp/ccek8Br2.o: In function `boost::condition_variable::condition_variable()': 
Thread.cpp:(.text._ZN5boost18condition_variableC1Ev[boost::condition_variable::condition_variable()]+0x17): undefined reference to `pthread_cond_init' 
/tmp/ccek8Br2.o: In function `boost::condition_variable::~condition_variable()': 
Thread.cpp:(.text._ZN5boost18condition_variableD1Ev[boost::condition_variable::~condition_variable()]+0x11): undefined reference to `pthread_cond_destroy' 
/tmp/ccek8Br2.o: In function `boost::mutex::~mutex()': 
Thread.cpp:(.text._ZN5boost5mutexD1Ev[boost::mutex::~mutex()]+0x11): undefined reference to `pthread_mutex_destroy' 
/tmp/ccek8Br2.o: In function `boost::detail::thread_data_base::thread_data_base()': 
Thread.cpp:(.text._ZN5boost6detail16thread_data_baseC2Ev[boost::detail::thread_data_base::thread_data_base()]+0x23): undefined reference to `vtable for boost::detail::thread_data_base' 
/tmp/ccek8Br2.o: In function `boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)': 
Thread.cpp:(.text._ZN5boost6threadC1IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE[boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)]+0x36): undefined reference to `boost::thread::start_thread()' 
/tmp/ccek8Br2.o:(.rodata._ZTIN5boost6detail11thread_dataIPFvvEEE[typeinfo for boost::detail::thread_data<void (*)()>]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base' 
collect2: ld returned 1 exit status 

कोई भी विचार?

उत्तर

14

प्रयास करें:

g++ -static -pthread Thread.cpp -lboost_thread 

पुस्तकालय वस्तुओं (या स्रोत) है कि उन पुस्तकालयों से प्रतीकों का उपयोग करने के बाद निर्दिष्ट किया जाना चाहिए।

+1

ऐसा लगता है कि मुझे मैन पेज को अधिक सावधानीपूर्वक पढ़ने की जरूरत है। धन्यवाद! –

संबंधित मुद्दे