在创建共享库时让ld忽略未定义的引用

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

我正在尝试让gccld忽略未解析的引用,从一堆用-fpic标志编译的目标文件中组合一个共享库。

到目前为止,我尝试了很多选项(为了简洁起见,用一些小文件代替了许多目标文件的长文件名):

ld --allow-shlib-undefined --unresolved-symbols=ignore-all -shared 1.o 2.o -o lib0.so
ld -G 1.o 2.o -o lib0.so

(我是红色somewhere-G将允许未解决的引用,但没有运气。)

通过gcc(使用-Wl,--unresolved-symbols=ignore-all)运行它会导致更少的未解析引用,因为它默认链接

-lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt

但它仍然抱怨没有-lopengl32-lgdi32

编译没有-fpic的lib,使用.a存储ar中的所有目标文件并使用静态链接到它同时具有到-lopengl32-lgdi32的exe程序链接导致完全正常工作。

实际的错误消息(为简洁起见,替换了长文件和函数名称):

[file].o: In function `[function]': [file].cpp:19: undefined reference to `memcpy'
[file].o: In function `[function]': [file].cpp:26: undefined reference to `memcpy'

[file].o:[file].cpp:(.xdata+0x4c): undefined reference to `__gxx_personality_seh0'
[file].o:[file].cpp:(.xdata+0x74): undefined reference to `__gxx_personality_seh0'
[file].o:[file].cpp:(.rdata$[file]]+0x20):undefined reference to `__cxa_pure_virtual'
[file].o:[file].cpp:(.rdata$[file]]+0x28): undefined reference to `__cxa_pure_virtual'

如何让ld忽略未定义的引用(至少来自libopengl32libgdi32,如果不是libstdc++等)并让那些将要使用它的程序链接到它们?

gcc linker mingw ld
1个回答
0
投票

如何让ld忽略未定义的引用

GNU ld(和大多数其他UNIX链接器)在构建共享库时已经忽略了未定义的引用。

看起来您可能在AIX上,共享库和可执行文件非常相似,并且适用特殊规则。 g++ -shared ...应该仍然可以在AIX上工作。

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