【发布时间】:2021-09-16 19:24:39
【问题描述】:
(我看到了关于这个问题的每一个 StOF 问题的答案 - 没有一个完全有帮助。经过 3 天三夜的努力,我感到非常沮丧。)
-
libcurl.a 静态链接:
- OpenSSL 1.1.1k [64bit/32bit]
- brotli 1.0.9 [64bit/32bit]
- libgsasl 1.10.0 [64bit/32bit]
- libidn2 2.3.1 [64bit/32bit]
- libssh2 1.9.0 [64bit/32bit]
- nghttp2 1.43.0 [64bit/32bit]
- zlib 1.2.11 [64bit/32bit]
- zstd 1.5.0 [64bit/32bit]
案例 1 - 好像 curl 不是静态链接的
x86_64-w64-mingw32-gcc-10.2.0.exe -o main.exe main.c "C:\curl-7.77.0-win64-mingw\lib\libcurl.a" -DCURL_STATICLIB
抛出无休止的错误行,好像 libcurl 没有与其依赖项静态链接*:
...\lib\libcurl.a(http2.o):(.text+0x7f): undefined reference to `nghttp2_version'
...\lib\libcurl.a(http2.o):(.text+0x297): undefined reference to `nghttp2_submit_rst_stream'
... (then the errors include many more undefined reference to symbols from nghttp2, ssl, crypt, ssh, gsasl)
【问题讨论】:
-
我会提到其他相关的案例。
-
静态库本身实际上并没有链接,它实际上只不过是一个目标文件的存档。因此,与静态库的链接就像与实际目标文件本身的链接一样。如果静态库有其他库依赖项,您也必须显式链接它们。
-
"libcurl.a is statically linked with..." 没有多大意义。
libcurl.dll可以与它们链接,但不能与libcurl.a链接。当你链接静态库时,你必须手动链接它们的依赖。 -
那是 curl 应用程序,独立程序,而不是库。
-
是的,完全正确。或者考虑使用 pkg-config,它可以自动生成这些标志(最简单的方法是从 MSYS2 安装它)。
标签: c windows curl mingw static-libraries