【问题标题】:Undefined references when including boost library包含 boost 库时未定义的引用
【发布时间】:2010-02-28 19:33:53
【问题描述】:

我正在尝试使用 boost 的 asio 库,但我不断收到未定义的引用。我在使用 G++ 编译器的 Windows 上的 Dev-Cpp。

我使用来自 boostpro 计算的安装程序为 Boost 1.42.0 [link] 安装了 boost。这是我正在尝试制作的测试程序的代码:

#include <boost/asio.hpp>
#include <iostream>

int main(void){
    std::cout << "Boost test." << std::endl;
}

我的 boost 包含头文件位于 /include 下,所有用于 boost 的库都直接编译并位于 /lib 下。似乎有一些图书馆没有被包括在内,但我不知道是什么。我尝试了包括一些可能的,但无济于事。

我得到的链接器错误类型是:

[Linker error] undefined reference to `boost::system::get_system_category()'
[Linker error] undefined reference to `boost::system::get_generic_category()' 
[Linker error] undefined reference to `boost::system::get_generic_category()' 
[Linker error] undefined reference to `boost::system::get_generic_category()' 
[Linker error] undefined reference to `boost::system::get_system_category()' 
[Linker error] undefined reference to `WSACleanup@0' 
[Linker error] undefined reference to `WSAStartup@8' 
[Linker error] undefined reference to `boost::system::get_system_category()' 
ld returned 1 exit status 
C:\Dev-Cpp\Projects\Boost Test\Makefile.win [Build Error]  [boostTest.exe] Error 1 

一段时间以来,我一直在努力提高工作效率,非常感谢您对此事的任何帮助。提前致谢。

【问题讨论】:

  • 您是否链接到 boost 库?包含标题和链接到库是 2 个独立的概念。
  • 我尝试了一些与库的链接,但不确定是哪些。我尝试了一些可能的库,例如系统库和 iostream 库,但每次都得到相同的结果。

标签: c++ boost boost-asio


【解决方案1】:

几天前我在使用 boost::asio 时遇到了这个问题。您需要编译并链接 boost::system 库。

【讨论】:

  • 你是怎么做到的?我已经尝试链接我找到的所有 boost_system 和 libboost_system 库,但我得到了相同的结果。
  • @alecRN:检查 russoue 的答案。将 -lboost_system 添加到 g++ 参数(实际上是链接器)。
【解决方案2】:

您必须链接到 libboost_system.a 和 libboost_filesystem.a。

【讨论】:

    【解决方案3】:

    我使用 netbeans,所以我在附加行中输入了“-lboost_system”!那是个错误。

    在对象之前添加了额外的行,因此我遇到了同样的错误。然后我发现如果我从控制台运行并将 -lboost_system 放在 VERY END 一切正常。最后,我找到了在 netbeans 中设置的正确位置(在库而不是命令部分),该字段将其添加到最后!

    请记住,如果您有库在命令中,这不仅很重要!位置确实很重要:)记得把库放在最后并验证它:)

    工作得很好:

    g++.exe -D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS   -c -g -MMD -MP -MF async_client.o.d -o async_client.o async_client.cpp
    g++.exe -D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS -o async_client async_client.o -lws2_32 -lboost_chrono -lboost_system -lboost_thread
    

    不起作用:

    g++.exe -D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS   -c -g -MMD -MP -MF async_client.o.d -o async_client.o async_client.cpp
    g++.exe -D_WIN32_WINNT=0x0501 -D__USE_W32_SOCKETS -lws2_32 -lboost_chrono -lboost_system -lboost_thread -o async_client async_client.o 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 2019-11-22
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多