繁体   English   中英

在 Ubuntu x64 上链接 Boost

[英]Linking against Boost on Ubuntu x64

在阅读了很多关于此事的SO问题后,我无法让它发挥作用。 我下载了 boost_1_60_0,然后运行命令来构建它:

sudo ./bootstrp.sh --prefix=/home/ricardo/boostlib
sudo ./b2 install -j8

我什至尝试像这样运行b2

sudo ./b2 install -j8 architecture=x86 address-model=64 

不要紧。 错误总是一样的:

main.cpp:(.text+0x7e): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x8a): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x96): undefined reference to `boost::system::system_category()'

是的,我知道。 链接错误,应该与-lboost_system和所有一起运行。 是的,你应该放-L/home/ricardo/boostlib/lib 我知道。

这是我的 CMake 的样子:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -L/home/ricardo/boostlib/lib -lboost_system -Wl,--verbose")

include_directories("/home/ricardo/boostlib/include")

您可能会问: -Wl,--verbose的输出是什么? 好吧,出人意料的是,找到了 libboost_system.so:

attempt to open /home/ricardo/boostlib/lib/libboost_system.so succeeded
-lboost_system (/home/ricardo/boostlib/lib/libboost_system.so)

好的。 图书馆找到了。 我仍在尝试寻找一些替代方案,到目前为止似乎没有任何效果。 所以,即使我将它与 boost 链接起来,并且已经找到 boost_system,该程序仍然无法编译,因为......为什么? 有人可以解释我吗?

编辑: 如何使用 CMake 将 C++ 程序与 Boost 链接似乎有效。 虽然我仍然想知道为什么我的方法不起作用,以及当我想仅使用 g++ 编译器链接 boost 而没有 CMake 和 Make 时我应该怎么做。 我之前已经能够成功地链接到 Openblas,所以我想知道为什么它不能与 Boost 一起使用。

Edit2:这是我在运行make VERBOSE=1后得到的 g++ 命令,现在我可以看到源代码被放置在依赖项之后。

 -std=c++11 -L/home/ricardo/boostlib/lib -lboost_system   CMakeFiles/prophet-service.dir/main.cpp.o  -o prophet-service -rdynamic

这是我当前的 CMake 文件:

cmake_minimum_required(VERSION 3.2)
project(prophet-service)
set(SOURCE_FILES
    main.cpp)
include_directories("/home/ricardo/boostlib/include")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -L/home/ricardo/boostlib/lib -lboost_system")
add_executable(prophet-service ${SOURCE_FILES})

我似乎也没有libbost_system.a文件。 至少现在我知道我需要 .a 文件而不是 .so 文件。

你的链接顺序正确吗? 具有依赖关系的东西需要放在满足依赖关系的东西之前。

您需要使用扩展名 .a 链接库的版本,因为链接器需要此扩展名(用于静态库)而不是用于共享库的 .so(与 Windows 的 dll 相同)。

例如,如果我在我的 Ubuntu 操作系统上搜索 libboost_system.a,我会发现以下内容:

frar@Home-PC:~$ locate libboost_system.a
/home/frar/Documents/SVILUPPO/boost_1_59_0/bin.v2/libs/system/build/gcc-4.8/release/link-static/threading-multi/libboost_system.a
/home/frar/Documents/SVILUPPO/boost_1_59_0/stage/lib/libboost_system.a
/usr/lib/x86_64-linux-gnu/libboost_system.a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM