我是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来说,我是新的(大约几周),我们将非常感谢任何帮助。
答案 0 :(得分:0)
实际上,Gentoo有一个eclass(es)来构建基于CMake的项目(参见/usr/portage/cmake*.eclass
)。和AFAIK一样,它取代了你的软件包选项(确切地说,它添加了一种新的配置类型),在/etc/portage/make.conf
中配置(如果你使用paludis,则为/etc/paludis/bashrc
)。所以,我不知道ebuild包中的“hacking”CMakeLists.txt
没有帮助。
因此,最简单的方法是将该选项添加到您的Gentoo设置中。 Personaly我使用this way在我的系统中构建boost
库(是的,我需要在我的一些项目中将boost的静态库链接到动态库中)。是的,我正在使用paludis
,但emerge
可能具有相似的功能(一种设置每个包编译器选项的方法)。
另一种方式,而不是直接“黑客”编译器选项(通过CMAKE_<LANG>_FLAGS
),看看CMAKE_POSITION_INDEPENDENT_CODE - 它会为你添加一个合适的编译器选项,并且可能是eclass'使用缓存进行操作不会影响此设置。
答案 1 :(得分:0)
我从一开始就简单地重新安装了整个内容,将$ ./configure
的所有实例都替换为$ ./configure --enable-shared
(首先确保删除所有文件夹和文件,包括上一次尝试的.so文件)。