gpt4 book ai didi

c - 编译共享库时出错

转载 作者:行者123 更新时间:2023-11-30 16:58:43 25 4
gpt4 key购买 nike

我正在尝试使用 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 .

最佳答案

在 x86_64 架构上,gcc 要求您使用 -fPIC(位置无关代码)。这是因为符号 rand 的重定位类型是 R_X86_64_PC32 类型。您可以使用 -mcmodel=large 它将重定位类型设置为 R_X86_64_64。

gcc -g -mcmodel=large -c code.c -o code.o
gcc -shared -o libcode.so code.o

更好地解释here .

关于c - 编译共享库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38583931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com