在Linux上用GCC加强链接

我试图在Ubuntu 11.10下使用从存储库安装的boost 1.42编译一个C ++程序(我也尝试过自己构buildboost,但是结果与repo-boost相同)。 源文件编译但连接器给出错误…我试了几个小时,但无法find解决scheme,也许有人可以帮助我…

这是Makefile的目标

CXX = /usr/bin/g++ LDFLAGS = -L. \ -Lpath/to/libMy_Lib.a CFLAGS = -I. \ -Wall \ -g \ -O0 OBJECTS = obj1.o obj2.o %.o: %.cpp $(CXX) -c $*.cpp -o $@ \ -Wno-deprecated \ $(CFLAGS) all: program program: $(OBJECTS) $(CXX) $^ \ $(LDFLAGS) \ -o myProg \ -lboost_regex \ -lboost_filesystem \ -lboost_date_time \ -lboost_system \ -lboost_thread \ -lMy_Lib 

libMy_Lib.a是一个库也使用boost(我没有问题在同一个系统上编译它)。 所有的libs在/ usr / lib中都可以正常运行

这里是输出ld生成(我用make 2>输出) http://ubuntuone.com/6QlU7AUZGgLGIu7sHbvDHm

也许库的顺序是不正确的(我知道boost_filesystem取决于boost_system,但我不知道其余的),或者我忘了指定一些额外的库,我的程序需要链接到…

这真的让我感到困扰,我觉得我是盲目的,看不到它…

这些错误信息令人印象深刻

 ../../DIAG_DECODER//libDecoder_Element.a(BaseElements_Group.o): In function `bool boost::regex_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)': BaseElements_Group.cpp:(.text._ZN5boost11regex_matchIN9__gnu_cxx17__normal_iteratorIPKcSsEESaINS_9sub_matchIS5_EEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SD_RNS_13match_resultsISD_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsE[bool boost::regex_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)]+0x4c): undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match()' 

我在“未定义的参考”之前添加了一个换行符…

我想你应该在任何Boost库之前列出使用Boost函数的库。