首页 > 解决方案 > 尝试使用 boost 文件系统构建:“重定位……在创建共享对象时无法使用;使用 -fPIC 重新编译”

问题描述

这是静态库与共享库的 linux/g++ 版本吗?

Ubuntu 18.04、boost 1.65、g++ 7.5.0、cmake 3.10.2、GNU make 4.1。ubuntu 18.04 的默认版本几乎所有内容,以及通过 apt-get 提供的“最新”增强版本。(顺便说一句,是否有更新的 ubuntu 可用的更新版本,或者只是落后那么远?)

我正在尝试将使用许多不同 boost 组件(chrono、文件系统、proram_ptions、regex、system、thread、timer 和 unit_test_framework)的软件移植到 NVidia Jetson TX2 板......它使用上述版本的 ubuntu它既是开发板又是主机。

我目前要清除的障碍是在 cmake: add_library( SHARED ...) 中链接第一个共享库在 g++ 中失败,并出现标题错误。'blah blah blah' 部分提到了 boost 文件系统中的一个特定入口点。

我得出结论,我需要使用请求的构建标志重建 boost 文件系统:-fPIC。令人震惊,我知道。我似乎记得 boost 在其构建系统方面是它自己独特的雪花,所以这会很有趣。至少 cmake 是我认识的魔鬼。

libboost*-dev apt 软件包是否包含我需要重建的所有内容,还是我需要直接获取相关版本的源代码?我尝试使用 apt-file 来查看去了哪里……但是考虑到有多少不同的 .c?? 和 。??等等扩展都在那里,我什至不确定我正在搜索 boost::filesystem 的文件列表中的正确内容。

在某些时候,我需要为开发板(arm)而不是主机(amd64)交叉编译这些东西,但一次让人头疼......

标签: c++boostcmakeg++

解决方案


您是否考虑过使用柯南重建 Boost ?好处:

  • 构建过程的尖角已经被打磨掉;
  • 您可以通过插入 ARM 交叉编译器的配置文件轻松进行交叉编译;
  • 您可以固定您想要的 Boost 版本。
  • 它与 CMake集成得非常好

推荐阅读