boost的多線程cpp程式,需要包含boost頭檔案thread.hpp,事實上boost的多線程程式還需要一些其他的庫,否則就會出現類似下面的編譯不過情況:
/tmp/ccSUUOz4.o(.text+0x1df): In function `__static_initialization_and_destruction_0':
/home/users/liudong09/ldboost/boost_1_54_0/ldboost154/inc/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
/tmp/ccSUUOz4.o(.text+0x1fa):/home/users/liudong09/ldboost/boost_1_54_0/ldboost154/inc/boost/system/error_code.hpp:223: undefined reference to `boost::system::generic_category()'
/tmp/ccSUUOz4.o(.text+0x215):/home/users/liudong09/ldboost/boost_1_54_0/ldboost154/inc/boost/system/error_code.hpp:224: undefined reference to `boost::system::system_category()'
/tmp/ccSUUOz4.o(.gnu.linkonce.t._ZN5boost16thread_exceptionC2EiPKc+0x14): In function `boost::thread_exception::thread_exception(int, char const*)':
/home/users/liudong09/ldboost/boost_1_54_0/ldboost154/inc/boost/thread/exceptions.hpp:52: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make64: *** [myreg] Error 1
經在網上查是還需要連結一個boost_system的庫,該庫檔案在boost安裝的庫目錄下,如果是預設安裝在系統目錄/usr/lib下可以直接找到:
ll -ha /home/users/liudong09/ldboost/boost_1_54_0/ldboost154/lib/libboost_system.*
-rw-rw-r-- 1 liudong09 liudong09 23K Dec 17 12:25 /home/users/liudong09/ldboost/boost_1_54_0/ldboost154/lib/libboost_system.a
lrwxrwxrwx 1 liudong09 liudong09 25 Dec 17 12:21 /home/users/liudong09/ldboost/boost_1_54_0/ldboost154/lib/libboost_system.so -> libboost_system.so.1.54.0
-rwxrwxr-x 1 liudong09 liudong09 22K Dec 17 12:21 /home/users/liudong09/ldboost/boost_1_54_0/ldboost154/lib/libboost_system.so.1.54.0
如果安裝在自定義目錄下,需要進行連結該庫的目錄和庫,否則會發現:
ldd (你的應用程式名字)
libboost_system.so.1.54.0 => not found
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003f0bf00000)
libm.so.6 => /lib64/tls/libm.so.6 (0x0000003f0b500000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003f0c300000)
libc.so.6 => /lib64/tls/libc.so.6 (0x0000003f0b000000)
/lib64/ld-linux-x86-64.so.2 (0x0000003f0ae00000)
boost_system庫顯示未找到,編譯可以通過,但運作時會出現:
./(你的應用程式名字): error while loading shared libraries: libboost_system.so.1.54.0: cannot open shared object file: No such file or directory
我的boost是安裝在自定義目錄下,是以還需要修改.bash_profile檔案(或.bashrc檔案),給全局變量LD_LIBRARY_PATH,增加自己的庫目錄:
export LD_LIBRARY_PATH=/home/users/liudong09/ldboost/boost_1_54_0/ldboost154/lib:$LD_LIBRARY_PATH
然後source .bash_profile使之生效
然後再編譯通過,執行正常
ldd (你的應用程式名字)
libboost_system.so.1.54.0 => /home/users/liudong09/ldboost/boost_1_54_0/ldboost154/lib/libboost_system.so.1.54.0 (0x00007f13a96d0000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003f0bf00000)
libm.so.6 => /lib64/tls/libm.so.6 (0x0000003f0b500000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003f0c300000)
libc.so.6 => /lib64/tls/libc.so.6 (0x0000003f0b000000)
librt.so.1 => /lib64/tls/librt.so.1 (0x00007f13a959d000)
libpthread.so.0 => /lib64/tls/libpthread.so.0 (0x0000003f0b900000)
/lib64/ld-linux-x86-64.so.2 (0x0000003f0ae00000)