boost的静态库怎么使用?

shager 2013-09-04 01:56:37
tool:gcc4.7.2
boost:153
OS:centOS5.8
在使用boost的时候,如果用so就没有问题,如果.a就提示:
undefined reference to `boost::system::generic_category()
我想以静态库的方式使用boost,该怎么做?
...全文
719 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sagesse_64 2014-07-17
  • 打赏
  • 举报
回复
-lboost_filesystem -lboost_system 两个都加上试试
lu062913 2013-12-06
  • 打赏
  • 举报
回复
我在Windows下遇到了这样子的问题:A.lib用到了boost库中的thread库,B.lib用到A.lib,测试程序C用到B.lib,在编译的时候出现找不到thread库。A.lib静态链接thread库
fengge8ylf 2013-10-16
  • 打赏
  • 举报
回复
我也遇到同样的问题了
shager 2013-09-18
  • 打赏
  • 举报
回复
非常感谢大家的回帖,我现在的错误不是库文件找不到,而是symbol没有找到。
晓敬 2013-09-10
  • 打赏
  • 举报
回复
假设你的.a文件在/usr/lib下,你可以-llibname或者 gcc -o target target.c /usr/lib/libname.a这样是可以的
shager 2013-09-09
  • 打赏
  • 举报
回复
一直顶起来,直到有人遇到类似问题
PonyCheng2019 2013-09-09
  • 打赏
  • 举报
回复
引用 7 楼 shager 的回复:
[quote=引用 6 楼 zealoussnow 的回复:] 当你编译完boost库后,静态库是放在库的stage/lib目录下。 要使用的话,就在bashrc里面加上BOOST_ROOT=xxx/boost_1_51_0,Boost_LIBRARYDIR=${BOOST_ROOT}/stage/lib。 编译程序的时候要指定boost的头文件和库的路径,如; g++ demo.cpp -I$BOOST_ROOT -L$Boost_LIBRARYDIR -lboostxxx -o demo
不是一定要放在/stage/lib下吧?因为我用 ./b2 install,自动安装到/usr/local/lib下面,链接命令是不会有错的,因为共享库和静态库同时存在,优先链接共享库,既然共享库能够链接,-l 还是 -L应该都是用对了,然后,删除共享库,只留下静态库,那么应该就只能链接静态库了,但是gcc的提示不是库文件找不到,而是有些symbol undefined[/quote] 如果你要连接静态库的话,得在编译选项里加上-static,编译器就会只链接静态库。如果如果是除了boost的库需要静态链接,而其他的需要链接共享库的话,就用gcc -Wall -I$BOOST_ROOT demo.cpp $Boost_LIBRARYDIR/libboostxxx.a。这样就行了。
PonyCheng2019 2013-09-09
  • 打赏
  • 举报
回复
引用 7 楼 shager 的回复:
[quote=引用 6 楼 zealoussnow 的回复:] 当你编译完boost库后,静态库是放在库的stage/lib目录下。 要使用的话,就在bashrc里面加上BOOST_ROOT=xxx/boost_1_51_0,Boost_LIBRARYDIR=${BOOST_ROOT}/stage/lib。 编译程序的时候要指定boost的头文件和库的路径,如; g++ demo.cpp -I$BOOST_ROOT -L$Boost_LIBRARYDIR -lboostxxx -o demo
不是一定要放在/stage/lib下吧?因为我用 ./b2 install,自动安装到/usr/local/lib下面,链接命令是不会有错的,因为共享库和静态库同时存在,优先链接共享库,既然共享库能够链接,-l 还是 -L应该都是用对了,然后,删除共享库,只留下静态库,那么应该就只能链接静态库了,但是gcc的提示不是库文件找不到,而是有些symbol undefined[/quote] 嗯,对。它有些库默认是放在stage/lib下的,好像也可以指定路径来着。
shager 2013-09-06
  • 打赏
  • 举报
回复
引用 6 楼 zealoussnow 的回复:
当你编译完boost库后,静态库是放在库的stage/lib目录下。 要使用的话,就在bashrc里面加上BOOST_ROOT=xxx/boost_1_51_0,Boost_LIBRARYDIR=${BOOST_ROOT}/stage/lib。 编译程序的时候要指定boost的头文件和库的路径,如; g++ demo.cpp -I$BOOST_ROOT -L$Boost_LIBRARYDIR -lboostxxx -o demo
不是一定要放在/stage/lib下吧?因为我用 ./b2 install,自动安装到/usr/local/lib下面,链接命令是不会有错的,因为共享库和静态库同时存在,优先链接共享库,既然共享库能够链接,-l 还是 -L应该都是用对了,然后,删除共享库,只留下静态库,那么应该就只能链接静态库了,但是gcc的提示不是库文件找不到,而是有些symbol undefined
PonyCheng2019 2013-09-05
  • 打赏
  • 举报
回复
当你编译完boost库后,静态库是放在库的stage/lib目录下。 要使用的话,就在bashrc里面加上BOOST_ROOT=xxx/boost_1_51_0,Boost_LIBRARYDIR=${BOOST_ROOT}/stage/lib。 编译程序的时候要指定boost的头文件和库的路径,如; g++ demo.cpp -I$BOOST_ROOT -L$Boost_LIBRARYDIR -lboostxxx -o demo
雪米粥 2013-09-05
  • 打赏
  • 举报
回复
会不会是连接的选项不对?-lboostxxx -Ldir
shager 2013-09-04
  • 打赏
  • 举报
回复
引用 3 楼 max_min_ 的回复:
[quote=引用 2 楼 shager 的回复:] 我只编译.a文件都不行,link=static runtime-link=static这样编译的 用nm能看到这些symbol,就是链接不了,重编了很多遍了。
没有连接成功!重新编译下源码生成静态库再链接试试先[/quote] 编译了很多遍了,全部重编也弄过,还特意同时编译了共享库和静态库,共享库链接成功之后,把共享库删除了,再用静态库链接,结果还是不行。 明天再去试试,把boost源码和自己的代码都重新编译。
max_min_ 2013-09-04
  • 打赏
  • 举报
回复
引用 2 楼 shager 的回复:
我只编译.a文件都不行,link=static runtime-link=static这样编译的 用nm能看到这些symbol,就是链接不了,重编了很多遍了。
没有连接成功!重新编译下源码生成静态库再链接试试先
shager 2013-09-04
  • 打赏
  • 举报
回复
我只编译.a文件都不行,link=static runtime-link=static这样编译的 用nm能看到这些symbol,就是链接不了,重编了很多遍了。
图灵狗 2013-09-04
  • 打赏
  • 举报
回复
需要重新编译boost静态库。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧