通常-fPIC 编译选项与 -shared 编译选项一起使用,用于创建动态共享库。 如果没有 -fPIC 选项,编译器默认生成的代码是位置相关的,即 PDC:Position-Dependent Code。 另外需要注意的一点是:-fPIC 只适用于编译可重定位的目标文件,即 .o 文件,而 -fPIE 则用于生成位置无关的可执行文件。PIE:Position-Independent Ex...
如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置. 不加fPIC编译出来的so,是要再加载时根据加载到的位置...
上面的命令行中-shared表明产生共享库,而-fPIC则表明使用地址无关代码。PIC:Position Independent Code.Linux下编译共享库时,必须加上-fPIC参数,否则在链接时会有错误提示(有资料说AMD64的机器才会出现这种错误,但我在Inter的机器上也出现了): /usr/bin/ld: test.o: relocation R_X86_64_32 against `a local ...
51CTO博客已为您找到关于-fpic 编译参数的作用的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及-fpic 编译参数的作用问答内容。更多-fpic 编译参数的作用相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。
gcc编译参数-fPIC的一些问题 2015-03-21 17:19 −ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加... ...
g++ -fPIC -shared test.cc -o lib.so 1. 或者是: g++ -fPIC test.cpp -c -o test.o ld -shared test.o -o lib.so 1. 2. 上面的命令行中-shared表明产生共享库,而-fPIC则表明使用地址无关代码。PIC:Position Independent Code. Linux下编译共享库时,必须加上-fPIC参数,否则在链接时会有错误提示...
gcc编译参数-fPIC问题 `a local symbol' can not be used when making a shared object; 2014-07-14 16:24 −gcc -shared -o hack.so hack.c/usr/bin/ld: /tmp/ccUZREwA.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object;... ...
如果用没有加这个参数的编译后的共享库,也可以使用的话,可能是两个原因: 1:gcc默认开启-fPIC选项 2:loader使你的代码位置无关 从GCC来看,shared应该是包含fPIC选项的,但似乎不是所以系统都支持,所以最好显式加上fPIC选项。参见如下 `-shared' Produce a shared object which can then be linked with other ...
如果用没有加这个参数的编译后的共享库,也可以使用的话,可能是两个原因: 1:gcc默认开启-fPIC选项 2:loader使你的代码位置无关 从GCC来看,shared应该是包含fPIC选项的,但似乎不是所以系统都支持,所以最好显式加上fPIC选项。参见如下 `-shared' Produce a shared object which can then be linked with other ...