天天看點

boost多線程庫之準備動作

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)

繼續閱讀