【问题标题】:Install and build Boost library in Linux在 Linux 中安装和构建 Boost 库
【发布时间】:2009-07-09 02:36:59
【问题描述】:

我正在关注Boost Getting Started 文章。 我已经用 Bjam 安装了它,我可以看到包含文件和库文件(.a、.so)。

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
}

如果我使用此命令构建上述代码

g++ -I./boost/include -L./boost/lib -lboost_regex-gcc43-mt -static -o test_boost2 test_boost2.cc

我收到此错误:

/tmp/ccJFVVid.o: In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':
    test_boost2.cc:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)]+0x22): undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
    collect2: ld returned 1 exit status

在我的 Windows 机器上运行正常。

怎么了?

gcc 版本 4.3.2 (Debian 4.3.2-1.1)

Linux xxxxxxxx 2.6.26-1-686 #1 SMP Fri Mar 13 18:08:45 UTC 2009 i686 GNU/Linux

【问题讨论】:

    标签: linux boost


    【解决方案1】:
    sudo apt-get install libboost-regex-dev
    

    不要费心从源代码安装,因为更智能的系统可以做得更好。

    要编译,只需使用

    g++ -lboost_regex boost.cpp -o boost
    

    获取可用包名称列表(boost 的更多部分):

    apt-cache search libboost | grep -- -dev
    

    免责声明:我假设您使用 Debian,因为这是您的 GCC 版本报告的内容。

    【讨论】:

    • 有效!但是如果我想安装最新版本的Boost(1.39)怎么办?因为我真正想要使用的是 Boost.Asio 库。 :)
    • 如果你使用的是 lenny,你可以使用'libboost1.35-dev',如果你使用的是squeeze,则有'libboost1.38-dev'。还有 asio 的独立版本,“libasio-dev”。不过,lenny 中的版本已经很老了。
    • 链接库应该在编译结束时,不是吗?因此它将是: g++ boost.cpp -o boost -lboost_regex
    【解决方案2】:

    我发现了问题! g++命令问题! :( 对不起。 如果我将 -l 选项移到行尾,它不会抱怨更多:)

    【讨论】:

      【解决方案3】:

      你的

      -L./boost/lib
      

      似乎很可疑。构建 Boost 时,这些库被放入 stage/lib 目录。此外,默认构建过程不会创建静态库,因此您最好将-static 关闭命令行。如果这不能解决问题,我建议您按照my blog 的步骤解决此问题。

      【讨论】:

      • 在我单独编译正则表达式并使用它的结果后,同样的错误。 g++ -I./boost_1_39_0 ./boost_1_39_0/libs/regex/build/gcc/libboost_regex-gcc-1_38.a -o test_boost2 test_boost2.cc
      • g++ -I./boost_1_39_0 -o test_boost2 test_boost2.cc ./boost_1_39_0/libs/regex/build/gcc/libboost_regex-gcc-1_38.a ^ 这有效!!!!!!跨度>
      • 这是因为对于静态库,您在链接器命令行中指定它们的位置很重要。再次,请参阅博客文章。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      相关资源
      最近更新 更多