gpt4 book ai didi

c - 当我制作共享库时,发生错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:34 24 4
gpt4 key购买 nike

我做了一个共享库如下:

  1. gcc -c output.c
  2. gcc -shared -fPIC -o liboutput.so output.o

当output.c是follow时,它可以工作。

//#include "output.h"
#include <stdio.h>

int output(const char* st) {
return 1+2;
}

但是,当 output.c 发生如下变化时,会发生错误。

//#include "output.h"
#include <stdio.h>

int output(const char* st) {
printf("%s\n", st);
return 1+2;
}

这是错误信息:

/usr/bin/ld: output.o: relocation R_X86_64_PC32 against undefined 符号 `puts@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: 最后的链结失败: 错误的值 collect2: error: ld returned 1 exit status

我想知道为什么以及如何处理它。提前致谢。

最佳答案

您需要将output.c 编译为与位置无关的代码。

gcc -c -fPIC 输出.c

在第一个版本中你没有调用任何库函数。但在第二个 printf 中被调用。一般来说,如果您打算稍后构建共享库,请使用 -fPIC 编译所有源代码。

关于c - 当我制作共享库时,发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44018349/

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