Boost 静态库怎么不行

时间:2023-02-10 18:25:36
只是一个简单的linux下的测试,用的cmake写的
库连接成这样就可以(默认也是先用动态库)
target_link_libraries(test boost_thread boost_system)
或者指定动态库
target_link_libraries(test libboost_thread.so libboost_system.so)
但是指定静态库就不行,有人知道为什么吗
target_link_libraries(test libboost_thread.a libboost_system.a)

会出现类似这种错误
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../libboost_thread.a(thread.o): In function `boost::detail::get_current_thread_data()':
thread.cpp:(.text+0x2d): undefined reference to `pthread_key_create'
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../libboost_thread.a(thread.o): In function `boost::detail::set_current_thread_data(boost::detail::thread_data_base*)':
thread.cpp:(.text+0x6d): undefined reference to `pthread_key_create'
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../libboost_thread.a(thread.o): In function `boost::thread::start_thread_noexcept()':
thread.cpp:(.text+0xe3): undefined reference to `pthread_create'

10 个解决方案

#1


百度搜相关关键字。

#2


引用 1 楼 zhao4zhong1 的回复:
百度搜相关关键字。

我就是搜过了才来问的,请您以后不要回复我这种类似与授人以鱼不如授人以渔的话行吗

#3


。。。。。又沉了

#4


求救!!!!!!

#6


引用 5 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=boost%20静态库%20"undefined%20reference%20to%20%60pthread_key_create%27"
Boost 静态库怎么不行

可能是我没说明白或者您没了解我的意思,我的意思是,我已经有了动态库和静态库,当我指定用动态库时,程序是可以跑的,但是当我指定静态库时就会出错,我分析可能是这个静态库还需要用到其他的库,但是我不知道怎么把库链接库,而且不知道分析的对不对

#7


嗯 我说的对,结帖。

#8


需要链接pthread的库,动态链接就可以了,因为机器上都有这个库函数

#9


类似的问题都是一样的做法,如果是自带的库 只要动态链接就可以了,因为你要测试的机器上也都有自带的库,只把第三方的库写成静态链接,这样不需要移动第三方库,只需要把你的执行程序移动到另外一台机器上也是可以运行的

#10


Windows:
学会使用dumpbin.exe查看PE文件
学会使用depends.exe查看exe依赖的dll

Linux:
学会使用objdump查看可执行程序或模块
学会使用ldd命令查看可执行程序依赖的so

#1


百度搜相关关键字。

#2


引用 1 楼 zhao4zhong1 的回复:
百度搜相关关键字。

我就是搜过了才来问的,请您以后不要回复我这种类似与授人以鱼不如授人以渔的话行吗

#3


。。。。。又沉了

#4


求救!!!!!!

#5


#6


引用 5 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=boost%20静态库%20"undefined%20reference%20to%20%60pthread_key_create%27"
Boost 静态库怎么不行

可能是我没说明白或者您没了解我的意思,我的意思是,我已经有了动态库和静态库,当我指定用动态库时,程序是可以跑的,但是当我指定静态库时就会出错,我分析可能是这个静态库还需要用到其他的库,但是我不知道怎么把库链接库,而且不知道分析的对不对

#7


嗯 我说的对,结帖。

#8


需要链接pthread的库,动态链接就可以了,因为机器上都有这个库函数

#9


类似的问题都是一样的做法,如果是自带的库 只要动态链接就可以了,因为你要测试的机器上也都有自带的库,只把第三方的库写成静态链接,这样不需要移动第三方库,只需要把你的执行程序移动到另外一台机器上也是可以运行的

#10


Windows:
学会使用dumpbin.exe查看PE文件
学会使用depends.exe查看exe依赖的dll

Linux:
学会使用objdump查看可执行程序或模块
学会使用ldd命令查看可执行程序依赖的so