【问题标题】:Recompile with -fPIC Gentoo使用 -fPIC Gentoo 重新编译
【发布时间】:2016-09-12 15:44:19
【问题描述】:

我是 Gentoo 的新手,尝试使用 CMake 安装一个名为 TexGen (http://texgen.sourceforge.net/index.php/Main_Page) 的 3D 建模程序,但我不断收到错误消息:

relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC

这发生在步骤中:

[ 80%] Linking CXX shared module ../_Renderer.so

我查看了所有内容并尝试在 cmake 选项文件中设置 -fPIC 标志,但结果没有任何变化。正如我所说,我是 Linux 和 Gentoo 的新手(大约几周时间),非常感谢任何帮助。

【问题讨论】:

  • 您只使用了几个星期的linux,但您已经直接研究了gentoo?哦,男孩。
  • @MitchWeaver 我工作的实验室只使用 gentoo,所以这是一次冒险
  • 如果您从官方软件包中收到此错误,我建议您将其报告给 bugs.gentoo.org,如果没有,请报告 forums.gentoo.org,这是一个更好的平台新手。

标签: cmake gentoo fpic


【解决方案1】:

实际上,Gentoo 有一个 eclass(es) 来构建基于 CMake 的项目(参见 /usr/portage/cmake*.eclass)。和 AFAIK,它用你的替换包选项(准确地说,它添加了一个新的配置类型),配置在 /etc/portage/make.conf(或者 /etc/paludis/bashrc,如果你使用 paludis)。所以,我并不奇怪包 ebuild 中的“黑客”CMakeLists.txt 没有帮助。

因此,最简单的方法是将该选项添加到您的 Gentoo 设置中。就个人而言,我使用this way 在我的系统中构建boost 库(是的,我需要在我的一些项目中将boost 的静态库链接到动态库中)。是的,我正在使用 paludis,但 emerge 可能具有类似的功能(一种设置每个包编译器选项的方法)。

另一种方式,而不是直接“破解”编译器选项(通过CMAKE_<LANG>_FLAGS),看看CMAKE_POSITION_INDEPENDENT_CODE——它会为你添加一个适当的编译器选项,并且可能会使用缓存进行 eclass 操作'不影响此设置。

【讨论】:

    【解决方案2】:

    我让它工作(用于安装 ffmpeg),只需从头开始重新安装整个东西,将 $ ./configure 的所有实例替换为 $ ./configure --enable-shared(首先确保删除所有文件夹和文件,包括 .so 文件从之前的尝试)。

    显然这是因为https://stackoverflow.com/a/13812368/10593190

    【讨论】:

      猜你喜欢
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      相关资源
      最近更新 更多