问题描述
我写了一个简单的共享库,其中包含 stdio.h 中 stdout 的用法。
#include <stdio.h>
...
fflush(stdout);
...
在我使用下面的命令添加 fflush(stdout) 之前没有编译问题
$gcc -shared -o a.so a.c
但是在添加了 fflush(stdout) 之后,编译器抱怨:
/usr/bin/ld: /tmp/ccK4npwc.o: relocation R_X86_64_PC32 against symbol `stdout@@GLIBC_2.2.5' 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
有人可以尽可能详细地解释这背后的原理吗?为什么这里必须是 -fPIC?
编辑: 一些评论建议我在 PIC 上阅读,但这遗漏了我的问题。我的问题是为什么我需要这个程序的 PIC。在我的程序中,我还使用了来自 libc 的 puts。我可以在没有 -fPIC 的情况下很好地编译它。但是为什么 stdout 变量需要 -fPIC 呢?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)