make 时遇到下面的报错。本人不太清除。尤其对fpic不是很清楚。哪位达人指点下如何解决呢。 我用的是 fedora 13 x86_64系统。 ”Linux yy.localdomain 2.6.33.3-85.fc13.x86_64 #1 SMP Thu May 6 18:09:49 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux “ Building shared object library: ../libs/libfap.so /usr/bin/ld: lib/area.o: relocation R_X86_64_32 against `.bss' can not be used when making a shared object; recompi...
by fortuneteller - C/C++ - 2011-03-15 20:26:39 阅读(1379) 回复(0)
本帖最后由 hjk857 于 2011-12-11 10:29 编辑 [root@nginx_bak ~]# uname -a Linux nginx_bak 2.6.18-274.12.1.el5 #1 SMP Tue Nov 29 13:37:46 EST 2011 x86_64 x86_64 x86_64 GNU/Linux 在64位的系统是配置安装vlc遇到下面问题。 [root@nginx_bak ~]# make make[6]: Nothing to be done for `all-am'. make[6]: Leaving directory `/usr/local/src/vlc/vlc/modules/codec/omxil' make[5]: Leaving directory `/usr/local/sr...
首先-fpic,gcc手册上说是编译共享库库 -fpic,gcc手册上说是动态链接 是不是-fpic就是支持动态链接的共享库? Configured with: /dw/gaoming/x01tool/buildroot/toolchain_build_arm/gcc-4.0.1/configure --prefix=/dw/buildroot/build_arm/staging_dir --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=arm-linux-uclibc --enable-languages=c,c++ --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld ...
gcc里的参数-fpic的一些问题 根据手册的解释,fpic能增加代码的可重定位性,但是加不加这个参数,好像用起来没什么关系,因此查了些资料,有了些自己的理解。 位置无关代码主要是在访问全局变量和全局函数的时候采用了位置无关的重定位方法,既依赖GOT和PLT来重定位. 普通的重定位方法需要修改代码段,比如偏移地址0x100处需要重定位,loader就修改代码段的0x100处的内容,通过查找重定位信息得到具体的值.这种方法需要修改代...
我个人认为编译so文件,用不用-fpic都没有关系。 如果不用-fpic,那么在so加载初期,会对所有需要重定位的地址进行重定位操作,并根据重定位信息直接修改代码段; 如果用了-fpic,那么代码将在执行期间计算重定位,这样可以省去加载初期的重定位开销,但是却影响以后的执行性能,另外这样也可以实现代码段共享。 但是现在的linux新核心,比如centos5.5之类的,如果不开fpic,dlopen就会失败,dlerror指示“cannot restore segment...
-fpic Generates position-independent code for use in shared libraries (large model). -fpic Generates position-independent code for use in shared libraries (small model). 这两个large model和small model的区别到底在哪里啊? 什么时候应该用-fpic什么时候该用-fpic?
我使用gcc -fpic选项来编译一段代码,其中需要用到CPUID指令, 编译后出现Can't find register "BREG" while reloading "asm"的错误。 google后得知-fpic选项要求独占ebx寄存器,因而导致编译失败。 这种情况下,我该怎么处理? 非常感谢!
书里面讲fpic访问变量时用下面的代码? call L1 L1: popl %ebx; # ebx contains the current PC addl $PROCOFF, %ebx # ebx points to GOT entry for proc call *(%ebx) # call indirect through the GOT 既然$PROCOFF是编译时就确定的,为什么不直接用绝对地址访问,还要addl一次呢?