首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接器抱怨缺少-fPIC

链接器抱怨缺少-fPIC
EN

Stack Overflow用户
提问于 2018-09-13 14:03:15
回答 1查看 648关注 0票数 0

我正试图交叉编译一个冻结的Cython程序,以便在RPi上使用。

生成链接(用于Python库的许多对象)

代码语言:javascript
复制
/usr/bin/arm-linux-gnueabihf-ld: 
/root/xxx_Build/usr/local/lib/python3.7/config-3.7m-arm-linux-gnueabihf/libpython3.7m.a(getopt.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

链接器应该创建一个可执行文件(而不是共享对象)。为什么?

编译(我的模块):

代码语言:javascript
复制
cython_freeze.py -o main.c sub.py
cython sub2.py

{crossPrefix}gcc -fPIC -pthread -O2 -Wall -Wextra -fno-strict-aliasing -fwrapv -I{crossRoot}{pythonInclude} -c -o main.o main.c'
{crossPrefix}gcc -fPIC -pthread -O2 -Wall -Wextra -fno-strict-aliasing -fwrapv -I{crossRoot}{pythonInclude} -c -o sub.o sub.c'

链接:

代码语言:javascript
复制
{crossPrefix}gcc -Xlinker -export-dynamic -L{crossRoot}/usr/local/lib/{pythonCommand}/config-{pythonVersion}m-{crossPrefixM} main.o sub.o -l{pythonCommand}m -lm -lpthread -ldl -lutil -o 

版本:

  • Python3.7.0(来自带有默认构建的python.org )
  • Cython 0.28.5
  • 主机Ubuntu18.04 x64
  • 目标UBUNTU 16.04树莓Pi 3 B+

上述过程与

  • Python 3.6.4
  • Cython 0.23.3
  • 主机Ubuntu16.04 x64
  • 目标UBUNTU 16.04树莓Pi 3 B+
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-13 18:58:11

链接器应该创建一个可执行文件(而不是共享对象)。为什么?

在Ubuntu17.04中,Ubuntu加入了GCC构建配置的趋势,默认情况下生成PIEs (位置独立可执行文件),因此默认情况下生成PIC对象文件。增强系统安全性,因为这样的可执行文件可以在存在ASLR的情况下运行。

请参见:

代码语言:javascript
复制
$ cat /etc/*-release | grep VERSION
VERSION="18.04.1 LTS (Bionic Beaver)"
VERSION_ID="18.04"
VERSION_CODENAME=bionic

$ echo "int main(void) { return 0; }" | gcc -x c -
$ file a.out
a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=3597d2a178dfb7ff7b0ba10886819bf19e40d596, not stripped

PIE是共享对象,所以PIE链接中的所有对象文件都必须编译-fPIC。在新编译的对象文件的默认情况下,这将是正确的,但对于libpython3.7m.a中的对象文件显然不是这样。

通过将-no-pie添加到链接选项中,您可以坚持使用传统的可执行文件。(在这种情况下,您不需要用-fPIC编译自己的代码)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52315461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档