使用ld创建非PIC共享库

问题描述 投票:4回答:1

我有一堆不带-fPIC选项的目标文件。因此,对函数的调用不使用@PLT。 (源代码为C,并使用clang进行编译。)

我想将这些目标文件链接到一个共享库,可以在运行时使用dlopen加载该共享库。我需要这样做,因为在加载实际的.so之前,我必须做很多设置。

但是每次我尝试与-shared选项链接时,都会出现错误-

制作共享库时,不能使用

C0]相对于符号R_X86_64_PC32的重定位;用splay_tree_lookup重新编译>

是否有一些我可以与-fPIC一起使用的标志,以便它生成加载时重定位库。实际上,我没有任何搬迁也可以。我可以提供该库的基本地址,如果虚拟地址不可用,则ld可能会失败。

我用于编译dlopen文件的命令等效于-

c

并且我正在使用链接

clang -m64 -c foo.c

我说是等效的,因为它是一个自定义编译器(由clang -m64 -shared *.o -o foo.so 分叉)并具有一些额外的步骤。但这是等效的。

我有一堆不带-fPIC选项的目标文件。因此,对函数的调用不使用@PLT。 (源代码是C,并使用clang编译)。我想链接这些...

c linux linker ld
1个回答
0
投票

如果可能,使用clang选项重新编译库的目标文件将是最佳选择!

© www.soinside.com 2019 - 2024. All rights reserved.