linux生成动态库时遇到了relocation R_X86_64_32 against `XXXXX’ can not be used when making a shared object; recompile with -fPIC错误。

很可能是在编译的时候CFLAGS 配置里没有 -fPIC 
或是在生成其他.o文件时没有 配置 -fPIC

eg

[root@localhost ppserver]# tree
.
├── bin
│ ├── PPServer
│ └── tcSend
├── build.sh
├── etc
│ └── conf.yaml
├── lib
│ ├── libconf.so
│ ├── libhsm.so
│ └── libkfpubs.so
├── make_eg
│ ├── makefile-bin
│ ├── makefile-lib
│ ├── makefile-src_obj_dir
│ └── makefile-srcsubobj
├── makefile
├── obj
│ ├── Application.o
│ ├── makefile
│ ├── PPServer
│ │ ├── MainFrm.o
│ │ ├── makefile
├── src
│ ├── include
│ ├── mainFrm
│ │ ├── MainFrm.cpp
│ │ ├── MainFrm.h
│ │ ├── makefile
│ │ ├── makefile-bin
│ ├── makefile
│ ├── PosPhoneProtocol
│ │ ├── Application.cpp
│ │ ├── makefile

在src/PosPhoneProtocol/Application.cpp 生成 obj/Application.o 使用 
gcc -c Application.cpp -o obj/Application.o

在src/mainFrm/MainFrm.cpp 生成 obj/PPServer/MainFrm.o 使用
gcc -c MainFrm.cpp -o obj/PPServer/MainFrm.o

进入到obj/PPServer 生成.so时
gcc -fPIC -shared obj/PPServer/MainFrm.o obj/Application.o -o libppserver.so

时会报这个错误。

因为在生成.o时没有加 -fPIC 。以前不报错也可以是在CFLAGS 回默认加上配置。

gcc编译参数-fPIC的一些问题
http://blog.sina.com.cn/s/blog_54f82cc201011op1.html

Logo

更多推荐