relocation R_X86_64_32 against XXXXX can not be used when making a shared object;recompile with -fPI
linux生成动态库时遇到了relocation R_X86_64_32 against `XXXXX’ can not be used when making a shared object; recompile with -fPIC错误。很可能是在编译的时候CFLAGS 配置里没有 -fPIC 或是在生成其他.o文件时没有 配置 -fPICeg[root@localhost ppserver
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
更多推荐
所有评论(0)