g ++以及升压链接错误在Ubuntu lucid中 [英] g++ and boost linker error on Ubuntu oneiric

查看:105
本文介绍了g ++以及升压链接错误在Ubuntu lucid中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我升级后得到以下错误。我想不出有什么不妥的地方。它应该就我所看到的工作。

  $使2  - ;&放大器; 1 |头
G ++ -o PROG -ansi -O2 -Wall -I / usr / include目录/升压-L / usr / lib目录-lboost_program_options -lboost_thread -lstdc ++ ./YYY.o ./main.o ./myClass.o
./YYY.o:在函数'无效的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)()):
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void~~MD~~aux的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)())] + 0×14):未定义的引用`的boost ::细节:: get_once_per_thread_epoch()'
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void~~MD~~aux的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)())] + 0x2C)设置:未定义的引用`的boost ::细节:: once_epoch_mutex
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void~~MD~~aux的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)())] + 0X62):未定义的引用`的boost ::细节:: once_epoch_mutex
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void~~MD~~aux的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)())] + 0x67)中:未定义引用`的boost ::细节:: once_epoch_cv
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void~~MD~~aux的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)())] +位0x95):未定义的引用`的boost ::细节:: once_epoch_mutex
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void~~MD~~aux的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)())] + 0xa9):未定义的引用`的boost ::细节:: once_epoch_mutex
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void~~MD~~aux的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)())] + 0xbd):未定义的引用`的boost ::细节:: once_global_epoch
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void~~MD~~aux的boost :: call_once的<无效(*)()>(升压:: once_flag和放大器;,无效(*)())] +为0xC2):未定义的引用`的boost ::细节:: once_epoch_cv$ ls -l命令/ usr / lib目录/ * * boost_threa
   0 lrwxrwxrwx 1根根06月17日22:30 3 /usr/lib/libboost_thread-mt.a - > libboost_thread.a
   0 lrwxrwxrwx 1根根6月25日22:30 3 /usr/lib/libboost_thread-mt.so - > libboost_thread.so.1.46.1
208K -rw-R - R-- 1根根208K 06月03日22:30 /usr/lib/libboost_thread.a
   0 lrwxrwxrwx 1根根6月25日22:30 3 /usr/lib/libboost_thread.so - > libboost_thread.so.1.46.1
 88K -rw-R - R-- 1根根87K 2010年10月21日/usr/lib/libboost_thread.so.1.42.0
100K -rw-R - R-- 1根根99K 06月03日22:30 /usr/lib/libboost_thread.so.1.46.1$ LS -ld / usr / include目录/升压/ *螺纹*
4.0K drwxr-XR-×5根根4.0K 10月13日21:59 / usr / include目录/升压/线程/
4.0K -rw-R - R-- 1根根839 6月3日22时18 /usr/include/boost/thread.hpp


解决方案

解决方案涉及改变联动的顺序,按手册页。问题是,它采用做工精细用较旧版本的g ++ ...

  $使
G ++ -I / usr / include目录/升压-MM ./YYY.cc ./main.cc ./myClass.cc> buildfiles.d
G ++ -ansi -O2 -Wall -I / usr / include目录/升压-c -o main.o中main.cc
G ++ -ansi -O2 -Wall -I / usr / include目录/升压-c -o myClass.o myClass.cc
G ++ -o PROG -ansi -O2 -Wall -I / usr / include目录/升压./YYY.o ./main.o ./myClass.o -lstdc ++ -L / usr / lib目录-lboost_program_options -lboost_thread

I am getting the following errors after an upgrade. I cannot figure what is wrong with it. It should work as far as I can see.

$ make 2>&1 | head
g++ -o prog -ansi -O2 -Wall -I/usr/include/boost -L/usr/lib -lboost_program_options -lboost_thread -lstdc++ ./YYY.o ./main.o ./myClass.o
./YYY.o: In function `void boost::call_once<void (*)()>(boost::once_flag&, void (*)())':
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void boost::call_once<void (*)()>(boost::once_flag&, void (*)())]+0x14): undefined reference to `boost::detail::get_once_per_thread_epoch()'
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void boost::call_once<void (*)()>(boost::once_flag&, void (*)())]+0x2c): undefined reference to `boost::detail::once_epoch_mutex'
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void boost::call_once<void (*)()>(boost::once_flag&, void (*)())]+0x62): undefined reference to `boost::detail::once_epoch_mutex'
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void boost::call_once<void (*)()>(boost::once_flag&, void (*)())]+0x67): undefined reference to `boost::detail::once_epoch_cv'
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void boost::call_once<void (*)()>(boost::once_flag&, void (*)())]+0x95): undefined reference to `boost::detail::once_epoch_mutex'
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void boost::call_once<void (*)()>(boost::once_flag&, void (*)())]+0xa9): undefined reference to `boost::detail::once_epoch_mutex'
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void boost::call_once<void (*)()>(boost::once_flag&, void (*)())]+0xbd): undefined reference to `boost::detail::once_global_epoch'
YYY.cc:(.text._ZN5boost9call_onceIPFvvEEEvRNS_9once_flagET_[void boost::call_once<void (*)()>(boost::once_flag&, void (*)())]+0xc2): undefined reference to `boost::detail::once_epoch_cv'

$ ls -l /usr/lib/*boost_threa*
   0 lrwxrwxrwx 1 root root   17 Jun  3 22:30 /usr/lib/libboost_thread-mt.a -> libboost_thread.a
   0 lrwxrwxrwx 1 root root   25 Jun  3 22:30 /usr/lib/libboost_thread-mt.so -> libboost_thread.so.1.46.1
208K -rw-r--r-- 1 root root 208K Jun  3 22:30 /usr/lib/libboost_thread.a
   0 lrwxrwxrwx 1 root root   25 Jun  3 22:30 /usr/lib/libboost_thread.so -> libboost_thread.so.1.46.1
 88K -rw-r--r-- 1 root root  87K Oct 21  2010 /usr/lib/libboost_thread.so.1.42.0
100K -rw-r--r-- 1 root root  99K Jun  3 22:30 /usr/lib/libboost_thread.so.1.46.1

$ ls -ld /usr/include/boost/*thread*
4.0K drwxr-xr-x 5 root root 4.0K Oct 13 21:59 /usr/include/boost/thread/
4.0K -rw-r--r-- 1 root root  839 Jun  3 22:18 /usr/include/boost/thread.hpp

解决方案

The solution involved changing the order of linkage, as per the man page. The thing is that it used to work fine with an older version of g++...

$ make
g++ -I/usr/include/boost -MM ./YYY.cc ./main.cc ./myClass.cc > buildfiles.d
g++ -ansi -O2 -Wall -I/usr/include/boost   -c -o main.o main.cc
g++ -ansi -O2 -Wall -I/usr/include/boost   -c -o myClass.o myClass.cc
g++ -o prog -ansi -O2 -Wall -I/usr/include/boost  ./YYY.o ./main.o ./myClass.o -lstdc++ -L/usr/lib -lboost_program_options -lboost_thread 

这篇关于g ++以及升压链接错误在Ubuntu lucid中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆