gpt4 book ai didi

gcc - 在制作 DLL 时让 ld 忽略 undefined reference

转载 作者:行者123 更新时间:2023-12-04 11:34:40 28 4
gpt4 key购买 nike

我正在尝试获取 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并静态链接到它,同时将 exe 程序链接到 -lopengl32-lgdi32结果工作完全正常。

实际的错误消息(为简洁起见,替换了长文件和函数名):
[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忽略 undefined reference (至少来自 libopengl32libgdi32 如果不是 libstdc++ 等)并让将要使用它的程序链接到它们?

最佳答案

其实ld不是 gcc 的一部分。它是 binutils 的一部分。
尝试链接 gcc ,或者在 C++ 的情况下 g++而不是 ld .
此外,在 Windows 上,您无法使用未解析的符号构建共享库 (.dll) 或可执行文件 (.exe)。 “DLL hell ”的一部分是您必须确保所有符号都能解析。
通常,只需找到提供这些符号的库并添加所需的 -l标志。
但是像 undefined reference to 'memcpy' 这样的错误表明它没有在标准库中找到东西。所以要么你使用 ld没有随 MinGW 一起提供,或者有像 -nostdlib 这样的标志现在告诉编译器不要寻找标准库。

关于gcc - 在制作 DLL 时让 ld 忽略 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17457602/

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