【发布时间】:2016-07-26 07:47:06
【问题描述】:
使用 gcc 我试图在 x86_64 系统上创建一个共享库。代码是
int myglob = 42;
int ml_func(int a, int b)
{
myglob += a;
return b + myglob;
}
用gcc -c -g code.c -o code.o 编译它,然后gcc -shared code.o -o libcode.so 抛出错误!
错误是/usr/bin/ld: libconst.o: relocation R_X86_64_PC32 against symbol 'myglob' can not be used when making a shared object; recompile with -fPIC。
所以我尝试用 -fPIC 标志编译它,但它抛出了同样的错误。
注意:我正在尝试查看库中的加载时间重定位,因此我不使用标志 -fPIC。
【问题讨论】:
-
myglob是否在图书馆外使用?你试过static吗? -
你看看我是否使用
gcc code.c -o libcode.so -shared编译它会成功编译但是如果我尝试创建一个目标文件然后创建共享库它会出错! -
本题背景是学习Load-time relocation
标签: c gcc shared-libraries