Arj*_*gri 16 gcc makefile llvm
我正在尝试使用llvm构建一个传递,并且我已经完成了构建llvm及其相关组件.但是,当我按照所有步骤构建包含makefile的传递后运行make时,我得到以下内容
在制作共享对象时,不能使用对"本地符号"的重定位R_X86_64_32; 用-fPIC重新编译
在通过谷歌搜索错误消息找到修复程序后,我发现这不是特定于llvm.一些解决方案建议我在运行configure时应该使用"--enable-shared",但这对我的情况没有帮助.现在我想重新构建llvm fPIC
,正如错误所说的那样.但是如何使用makefile执行此操作?
Har*_*d L 12
看起来你可以通过设置shell变量来添加-fPIC(对于与位置无关的代码,你想要的是可以在任何地址加载的共享库):
export CFLAGS="$CFLAGS -fPIC"
export CXXFLAGS="$CXXFLAGS -fPIC"
Run Code Online (Sandbox Code Playgroud)
看看Makefile.rules,这些将被选中并使用.似乎很奇怪,它不是从那里开始的.
编辑:
实际上,在makefile中阅读更多内容后,我发现了LLVM Makefile指南的链接.从Makefile.rules中,在Makefile中设置SHARED_LIBRARY = 1或LOADABLE_MODULE = 1(这意味着SHARED_LIBRARY)会将-fPIC放入编译器标志中.
如果你中等地相信你应该使用' -fPIC
'无处不在(或' -m32
'或' -m64
',我需要更频繁),那么你可以使用'技巧':
CC="gcc -fPIC" ./configure ...
Run Code Online (Sandbox Code Playgroud)
这假设是Bourne/Korn/POSIX/Bash shell,并gcc -fPIC
在运行configure脚本之前将环境变量CC设置为' '.这(通常)确保所有编译都使用指定的标志完成.为了设置编译的正确"bittiness",这有时比你找到的各种其他机制更好 - 编译很难绕过它,除非完全忽略你指定要使用的C编译器的事实.
归档时间: |
|
查看次数: |
32994 次 |
最近记录: |