将 libcurl+openssl 静态链接到我的项目时出现链接器错误

发布于 2024-11-29 02:28:36 字数 2787 浏览 2 评论 0原文

我正在尝试静态链接 libcurl (使用 SSL)进入我的项目,但我遇到了很多链接器错误:

../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xa9c): undefined reference to `CreateDCA@16'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xaa9): undefined reference to `CreateCompatibleDC@4'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xaba): undefined reference to `GetDeviceCaps@8'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xaca): undefined reference to `GetDeviceCaps@8'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xae0): undefined reference to `CreateCompatibleBitmap@12'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xaee): undefined reference to `SelectObject@8'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xb00): undefined reference to `GetObjectA@12'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xb71): undefined reference to `BitBlt@36'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xb7b): undefined reference to `GetBitmapBits@12'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xbd2): undefined reference to `SelectObject@8'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xbd9): undefined reference to `DeleteObject@4'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xbe3): undefined reference to `DeleteDC@4'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xbed): undefined reference to `DeleteDC@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x1b3b): undefined reference to `inet_addr@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x1ba4): undefined reference to `inet_addr@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x5d1e): undefined reference to `htonl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x5eed): undefined reference to `ntohl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x6f9a): undefined reference to `htonl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x728d): undefined reference to `htonl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x732c): undefined reference to `htonl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x757f): undefined reference to `ntohl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0xb45): undefined reference to `timeGetTime@0'

这是我下载的 lib folfer 中的文件列表。 在此处输入图像描述

有人告诉我应该定义宏 CURL_STATICLIB 并链接到 wsock32wldap32。还有什么我应该做的吗?

我正在使用 MinGW 和 Eclipse。

g++ -DCURL_STATICLIB -DUSE_LIBSSH2 -DHAVE_LIBSSH2 -DCURL_DISABLE_LDAP -DHAVE_LIBSSH2_H -DLIBSSH2_WIN32 -DLIBSSH2_LIBRARY -DUSE_SSLEAY -O0 -g3 -Wall -c -fmessage-length=0 -osrc\CURLDown.o ..\src\CURLDown.cpp

g++ -L../lib -oCURLDown.exe src\CURLDown.o -lcurl -lcrypto -lwsock32 -lwldap32 -leay32 -lidn -lrtmp -lssh2 -lz -lssl32 -lssl

I am trying to statically link libcurl (with SSL) into my project, but I am encountering lots of linker errors:

../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xa9c): undefined reference to `CreateDCA@16'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xaa9): undefined reference to `CreateCompatibleDC@4'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xaba): undefined reference to `GetDeviceCaps@8'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xaca): undefined reference to `GetDeviceCaps@8'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xae0): undefined reference to `CreateCompatibleBitmap@12'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xaee): undefined reference to `SelectObject@8'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xb00): undefined reference to `GetObjectA@12'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xb71): undefined reference to `BitBlt@36'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xb7b): undefined reference to `GetBitmapBits@12'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xbd2): undefined reference to `SelectObject@8'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xbd9): undefined reference to `DeleteObject@4'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xbe3): undefined reference to `DeleteDC@4'
../lib/libcrypto.a(rand_win.o):rand_win.c:(.text+0xbed): undefined reference to `DeleteDC@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x1b3b): undefined reference to `inet_addr@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x1ba4): undefined reference to `inet_addr@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x5d1e): undefined reference to `htonl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x5eed): undefined reference to `ntohl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x6f9a): undefined reference to `htonl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x728d): undefined reference to `htonl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x732c): undefined reference to `htonl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0x757f): undefined reference to `ntohl@4'
../lib/librtmp.a(rtmp.o):rtmp.c:(.text+0xb45): undefined reference to `timeGetTime@0'

Here is the list of files in lib folfer that I downloaded. enter image description here

I was told that I should define the macro CURL_STATICLIB and link in wsock32 and wldap32. Is there anything else that I should be doing?

I am using MinGW and Eclipse.

g++ -DCURL_STATICLIB -DUSE_LIBSSH2 -DHAVE_LIBSSH2 -DCURL_DISABLE_LDAP -DHAVE_LIBSSH2_H -DLIBSSH2_WIN32 -DLIBSSH2_LIBRARY -DUSE_SSLEAY -O0 -g3 -Wall -c -fmessage-length=0 -osrc\CURLDown.o ..\src\CURLDown.cpp

g++ -L../lib -oCURLDown.exe src\CURLDown.o -lcurl -lcrypto -lwsock32 -lwldap32 -leay32 -lidn -lrtmp -lssh2 -lz -lssl32 -lssl

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

任性一次 2024-12-06 02:28:37

对于那些在 google 上搜索此答案的人 - 对 `CreateDCA@16' 的未定义引用链接器错误正在寻找 libgdi.a (只需 -lgdi 即可)。请记住,它必须包含在要链接的库列表中的 libcurl 和 openssl 之后。

For those searching for this answer on google - the undefined reference to `CreateDCA@16' linker error is looking for libgdi.a (just -lgdi would do). Bear in mind it has to be included after libcurl and openssl in the list of libraries to link.

庆幸我还是我 2024-12-06 02:28:37

g++ -L../lib -oCURLDown.exe src\CURLDown.o -lcurl -leay32 -lidn -lrtmp -lssh2 -lz -lssl32 -lcrypto

建议您确实没有指定所有库。也许你的 makefile 中有一个拼写错误?
我还看到对位于 Winmm.lib 中的 timeGetTime() 的引用。

libeay32 和 libcrypto 似乎对谁应该定义什么存在误解。可能意外地出现了一个由两个库编译的源文件,而该库只应由一个库编译。

g++ -L../lib -oCURLDown.exe src\CURLDown.o -lcurl -leay32 -lidn -lrtmp -lssh2 -lz -lssl32 -lcrypto

suggests that you really don't specify all libs. Maybe there is a typo in your makefile?
I also see a reference to timeGetTime() which resides in Winmm.lib.

Also libeay32 and libcrypto seem to have a misunderstanding in who should define what. There is probably accidently a sourcefile that is compiled by both libs that should only be compiled by one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文