【问题标题】:g++ and boost linker error on Ubuntu oneiricUbuntu oneiric 上的 g++ 和 boost 链接器错误
【发布时间】:2023-04-01 16:50:01
【问题描述】:

升级后出现以下错误。我无法弄清楚它有什么问题。据我所知,它应该可以工作。

$ 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

【问题讨论】:

    标签: boost ubuntu g++ icc


    【解决方案1】:

    解决方案涉及根据手册页更改链接顺序。问题是它曾经可以在旧版本的 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 
    

    【讨论】:

    猜你喜欢
    • 2017-01-23
    • 1970-01-01
    • 2018-10-17
    • 2012-08-12
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2012-06-01
    相关资源
    最近更新 更多