环境:Ubuntu18.04 + gcc-7.5.0
背景:
如下图所示,当前目录下存在两个文件dbglog.h和dbglog.c:
为了将其编译成动态库,我首先执行操作:
gcc -c dbglog.c
接下来,执行命令: gcc -shared -fPIC -o libdbglog.so dbglog.o
,使其正式生成动态库*.so
文件,但却发生了报错,如下图所示:
/usr/bin/ld: dbglog.o: relocation R_X86_64_PC32 against symbol `dbglog_print’ can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
解决方案:
从给出的错误中已经大致提醒我们该如何纠正错误了,那就是在生成.o文件的时候加入参数-fPIC,接下来我们进行以下操作:
1. gcc -c -fPIC dgblog.c
2. gcc -shared -fPIC -o libdbglog.so dbglog.o