当前位置:网站首页>Introduction to the differences between compiler options of GCC dynamic library FPIC and FPIC
Introduction to the differences between compiler options of GCC dynamic library FPIC and FPIC
2022-07-06 08:33:00 【Hongyi】
The author didn't pay special attention to fPIC and fpic The difference between , Recently aarch64 A problem encountered in compiling on the server , Let yourself make a good inquiry of some information , Perhaps ordinary developers are not easy to encounter it , I hope it will be of some help to readers who are destined .
1) When dynamic library is out , Merge libnettle.a The library encountered the following error prompt
/data/compilerdir/bin/opensdk/linux64/lib/libnettle.a(fat-arm64.o): in function `fat_init': /data2/compilerdir/nettle/fat-arm64.c:198:(.text.startup+0x184): relocation truncated to fit: R_AARCH64_LD64_GOTPAGE_LO15 against symbol `_nettle_aes192_decrypt_c' defined in .text section in /data/compilerdir/bin/opensdk/linux64/lib/libnettle.a(aes192-decrypt.o)
/usr/bin/ld: /data/compilerdir/nettle/fat-arm64.c:198: warning: too many GOT entries for -fpic, please recompile with -fPIC
collect2: error: ld returned 1 exit status
/data2/compilerdir/bin/libhyscoder.so] Error 1
The key tips are
warning: too many GOT entries for -fpic, please recompile with -fPIC
Verified fpic and fPIC Compare
The same thing : Is to generate location independent code in the dynamic library . Through global offset table (GOT) Access all constant addresses . Dynamically load the program when the program starts GOT entry .
Difference : If the linked executable GOT The size exceeds the maximum value specified by the computer architecture , An error message will be reported in the compilation link , Tips -fpic It doesn't work ; So in this case , Need to use -fPIC recompile .GOT The size varies with the chip architecture ,SPARC Up for 8k, stay AArch64 Up for 28k( What the author meets is it ,GOT Limit exceeded , So wrong reporting ), stay m68k and RS / 6000 Up for 32k. and x86 There is no such restriction on .
Tips
In order to ensure the overall availability of the program during cross platform compilation , Usually, it is suggested to use fPIC
Reference source address
https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options
The original English text ( If the above address cannot be accessed , You can refer to the following original )
-fpic
Generate position-independent code (PIC) suitable for use in a shared library, if supported for the target machine. Such code accesses all constant addresses through a global offset table (GOT). The dynamic loader resolves the GOT entries when the program starts (the dynamic loader is not part of GCC; it is part of the operating system). If the GOT size for the linked executable exceeds a machine-specific maximum size, you get an error message from the linker indicating that -fpic does not work; in that case, recompile with -fPIC instead. (These maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k and RS/6000. The x86 has no such limit.)
Position-independent code requires special support, and therefore works only on certain machines. For the x86, GCC supports PIC for System V but not for the Sun 386i. Code generated for the IBM RS/6000 is always position-independent.
When this flag is set, the macros __pic__ and __PIC__ are defined to 1.
-fPIC
If supported for the target machine, emit position-independent code, suitable for dynamic linking and avoiding any limit on the size of the global offset table. This option makes a difference on AArch64, m68k, PowerPC and SPARC.
Position-independent code requires special support, and therefore works only on certain machines.
When this flag is set, the macros __pic__ and __PIC__ are defined to 2.
边栏推荐
- 2. File operation - write
- 深度剖析C语言数据在内存中的存储
- 3. File operation 3-with
- JVM performance tuning and practical basic theory - Part 1
- Image, CV2 read the conversion and size resize change of numpy array of pictures
- 【ROS】usb_cam相机标定
- Hungry for 4 years + Ali for 2 years: some conclusions and Thoughts on the road of research and development
- Summary of phased use of sonic one-stop open source distributed cluster cloud real machine test platform
- Circular reference of ES6 module
- Use br to back up tidb cluster data to S3 compatible storage
猜你喜欢
【MySQL】鎖
pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
On the day of resignation, jd.com deleted the database and ran away, and the programmer was sentenced
Hungry for 4 years + Ali for 2 years: some conclusions and Thoughts on the road of research and development
Unified ordering background interface product description Chinese garbled
Chrome浏览器的crash问题
Image,cv2读取图片的numpy数组的转换和尺寸resize变化
Synchronized solves problems caused by sharing
Deep analysis of C language data storage in memory
随机推荐
Process of obtaining the electronic version of academic qualifications of xuexin.com
[cloud native topic -45]:kubesphere cloud Governance - Introduction and overall architecture of enterprise container platform based on kubernetes
2022 Inner Mongolia latest construction tower crane (construction special operation) simulation examination question bank and answers
VMware virtualization cluster
CISP-PTE实操练习讲解
指针进阶---指针数组,数组指针
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
游戏解包的危害及资源加密的重要性
Ruffian Heng embedded bimonthly, issue 49
Bottom up - physical layer
China high purity silver nitrate Market Research and investment strategy report (2022 Edition)
Screenshot in win10 system, win+prtsc save location
Unified ordering background interface product description Chinese garbled
Hungry for 4 years + Ali for 2 years: some conclusions and Thoughts on the road of research and development
sys.argv
Online yaml to CSV tool
被破解毁掉的国产游戏之光
Analysis of pointer and array written test questions
leetcode刷题 (5.31) 字符串
logback1.3. X configuration details and Practice