【问题标题】:C++ Boost library linker doesn't find, won't compileC++ Boost库链接器找不到,不会编译
【发布时间】:2012-02-01 13:15:55
【问题描述】:

我正在尝试使用已编译的 Boost 库进行编译。我可以使用仅头文件的 Boost 库进行编译,但现在我想使用需要编译的库,我无法让它工作。我使用 toolset=gcc 和 --build-type=complete 阶段构建了整个 Boost 库。我正在使用 Eclipse,并且正在链接库所在的文件夹:project_properties->c/c++ build->settings->mingw c++ linker->libraries 和库搜索路径 (-L) 我m 链接文件夹路径。我收到如下错误:

对`boost::regex_error::raise() const'的未定义引用

对`boost::re_detail::lookup_default_collat​​e_name(std::string const&)'的未定义引用

我正在编译来自 boost 教程设置指南的示例代码,其中包括 boost/regex.hpp

【问题讨论】:

    标签: c++ eclipse boost linker mingw


    【解决方案1】:

    您需要将您的程序链接到 Boost 预编译库。

    例子:

    c++ -I path/to/boost_1_48_0 example.cpp -o example \
     -L~/boost/stage/lib/ -lboost_regex-gcc34-mt-d-1_36
    

    See description here

    【讨论】:

    • 我以为我做到了?但直接在 Eclipde IDE 中。我在 project_properties->c/c++ build->settings->mingw c++ linker->libraries (-L) 有两个文件夹
    • -L 只是指定在哪里查找库二进制文件,您还需要实际链接库 (-l)
    • 好的,但现在我尝试从正则表达式目录链接几个不同的 *.o,但没有一个有效。它说:“找不到”我试图链接的所有库。
    • @user1064036:检查您是否正确指定了库的路径并提供完整的错误消息。顺便说一句,很可能您想与.a 静态库链接,而不是.o 目标文件。
    • 好的,所以我将 *.a 文件手动取出到自定义文件夹中。现在我可以更快地手动找到所有文件,这是一个不错的选择吗?我现在可以编译正则表达式,但是如果我想编译一个 asio 示例,我仍然会遇到奇怪的错误,例如:C:/Documents and Settings/E/Desktop/eclipse/libs/boost_1_48_0/boost/asio/detail/impl/winsock_init.ipp :39: 对 `WSAStartup@8' 的未定义引用
    【解决方案2】:

    Eclipse:项目属性 -> c++ 构建 -> 设置 -> 链接器 -> 库

    如果您想使用共享库,请将 boost_regex 添加到库中,如果您想使用静态库,请添加 :/usr/lib/libboost_regex.a(或 libboost_regex.a 所在的任何位置)链接。

    【讨论】:

    • 如果我将 boost_regex 添加到库中会出现错误(找不到 -lboost_regex)我正在使用 windows xp 顺便说一句
    • @user1064036:Windows 或 Linux 在这里无关紧要,但 VisualC++ 编译器或 GCC 可以,因为 boost 库是使用 VC 不可移植 #pragma comment(lib, lib-name) 自动链接的。在 GCC(MinGW 使用它)上,您需要手动链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多