gpt4 book ai didi

c++ - 使用 GCC 在 Linux 上 boost 链接

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:54 27 4
gpt4 key购买 nike

我正在尝试使用从存储库安装的 boost 1.42 在 Ubuntu 11.10 下编译 C++ 程序(我也尝试自己构建 boost,但结果与 repo-boost 相同)。源文件编译但链接器出错...我尝试了几个小时但找不到解决方案,也许有人可以帮助我...

这是 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 的库(我在同一系统上编译它没有问题)。/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()'

我在“ undefined reference ”之前添加了一个换行符...

我认为您应该在任何 Boost 库之前列出使用 Boost 函数的库。

关于c++ - 使用 GCC 在 Linux 上 boost 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com