【问题标题】:c++ files to include for boost : asio用于 boost 的 c++ 文件:asio
【发布时间】:2014-04-23 00:00:44
【问题描述】:

我正在关注this tutorial,但它没有说明我需要包含哪些库才能获得提升,当前的链接选项是:

-I/usr/include/opencv2 -I/usr/include/boost_1_55_0 -I/usr/include/boost_1_55_0/boost -O0 -g3 -Wall -c -fmessage-length=0

但是这会返回以下错误:

这表明它找不到 asio,是我做错了什么还是 assio 是链接到的错误库?或者有没有其他方法可以查到。请注意,这是我的第二个 c++ 项目(通过我有很多 java 经验),首先是大量使用库,因此需要一些细节。

删除 boost/asio 给了我以下错误:

make all 
Building target: DisplayImage
Invoking: GCC C++ Linker
g++ -L/usr/include/opencv2 -L/usr/include/boost_1_55_0/boost -L/usr/include/boost_1_55_0 -L/usr/include/opencv2 -L/usr/lib -o "DisplayImage"  ./src/Cap.o ./src/DisplayImage.o ./src/Filters.o ./src/sender.o   -lopencv_imgproc -lopencv_highgui -lopencv_core
./src/sender.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost_1_55_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
/usr/include/boost_1_55_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::generic_category()'
/usr/include/boost_1_55_0/boost/system/error_code.hpp:224: undefined reference to `boost::system::system_category()'
./src/sender.o: In function `error_code':
/usr/include/boost_1_55_0/boost/system/error_code.hpp:323: undefined reference to `boost::system::system_category()'
./src/sender.o: In function `boost::asio::error::get_system_category()':
/usr/include/boost_1_55_0/boost/asio/error.hpp:224: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [DisplayImage] Error 1

构建完成**

如果重要的话,我会使用 ubuntu (x64) 笔记本电脑。

【问题讨论】:

  • 什么是-lboost/asio?好像没什么意义,去掉这个选项就好了。 Boost.Asio 只是标题,你不需要链接任何东西;但是,它取决于Boost.System,所以添加-lboost_system
  • 删除 boost/asio 会给我大量未定义的引用,但这可能只是因为它在到达未定义的部分之前就崩溃了/?
  • 什么未定义的引用?请复制链接器输出。正如我在上面的评论中提到的,您是否与 Boost.System 链接
  • 好的,我添加了请求的信息。
  • @你看过之前的cmets吗? -lboost.asio 是什么?没意思,删! “未充分引用”的列表在哪里?

标签: c++ eclipse boost linker


【解决方案1】:

大多数 boost 都是在所谓的“仅标头”代码中实现的。通过大量使用 C++ 模板,您的代码无需链接到实际的库代码。但是,也有一些实际的库。一般来说,您寻求的帮助可能在这里:http://www.boost.org/doc/libs/1_55_0/more/getting_started/unix-variants.html#link-your-program-to-a-boost-library

您的特定程序使用timersystem 库,因此您可能可以使用此命令行来链接您的程序:

g++ timer.cpp -o timer -lboost_timer -lboost_system

【讨论】:

  • 在您的链接中,他们使用了我的 boost 文件中不存在的 boost/stage。任何解决这个问题的方式,顺便说一句,我使用 ecliplse,所以我实际上不能直接处理命令行。
【解决方案2】:

你可以在boost/libs/asio/example/cpp03/tutorial/Jamfile.v2看bjam:

project
: requirements
    <library>/boost/system//boost_system
    <library>/boost/thread//boost_thread
    <define>BOOST_ALL_NO_LIB=1
    <threading>multi
    <os>SOLARIS:<library>socket
    <os>SOLARIS:<library>nsl
    <os>NT:<define>_WIN32_WINNT=0x0501
    <os>NT,<toolset>gcc:<library>ws2_32
    <os>NT,<toolset>gcc:<library>mswsock
    <os>NT,<toolset>gcc-cygwin:<define>__USE_W32_SOCKETS
    <os>HPUX,<toolset>gcc:<define>_XOPEN_SOURCE_EXTENDED
    <os>HPUX:<library>ipv6
;

你可以看到他们用

构建了所有的教程步骤
-lboost_system -lboost_thread -DBOOST_ALL_NO_LIB=1

在 Linux 上

【讨论】:

    猜你喜欢
    • 2013-05-15
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多