1

我是 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 还是很陌生(大约几周),任何帮助都将不胜感激。

4

2 回答 2

0

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

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

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

于 2016-06-17T19:27:35.310 回答
0

我通过简单地从头开始重新安装整个东西并$ ./configure替换为$ ./configure --enable-shared(首先确保删除所有文件夹和文件,包括上一次尝试中的 .so 文件)来让它工作(用于安装 ffmpeg)。

显然这是有效的,因为https://stackoverflow.com/a/13812368/10593190

于 2020-07-04T08:01:57.420 回答