【发布时间】:2017-05-30 16:36:54
【问题描述】:
我已经用 Windows mingw 成功编译了 openssl 库...然后我将它与我的应用程序链接,但它失败了,出现未解析的符号 _imp__shutdown。 nm 告诉目标文件确实引用了该符号。
如何找出应该将哪个库添加到ld 以解决这种依赖关系?此类情况有标准程序吗?
链接:
> g++ -static -Wl,--allow-multiple-definition -mthreads -Wl,-subsystem,windows ... -lws2_32 -lshlwapi ... -lssl -lcrypto ...
C:/openssl-1.0.1g-mgw\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x90): undefined reference to `_imp__shutdown@8'
C:/openssl-1.0.1g-mgw\libcrypto.a(bss_sock.o):bss_sock.c:(.text+0x1a0): undefined reference to `_imp__shutdown@8'
c:/MinGW/bin/../lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: C:/openssl-1.0.1g-mgw\libcrypto.a(bss_sock.o): bad reloc address 0x4 in section `.data'
collect2.exe: error: ld returned 1 exit status
未解析的符号:
> nm /c/openssl-1.0.1g-mgw/crypto/bio/bss_sock.o
...
U __imp__closesocket@4
U __imp__recv@16
U __imp__send@16
U __imp__shutdown@8
U __imp__WSAGetLastError@0
U __imp__WSASetLastError@4
...
GCC / Windows 7 x64:
> g++ --version
g++.exe (i686-posix-dwarf-rev3, Built by MinGW-W64 project) 4.8.2
【问题讨论】:
-
shutdown()函数的文档应该告诉你链接哪个库。 -
这看起来可能是名称修改问题。你有
extern "C"中shutdown()的声明吗? -
鉴于其他符号的名称,这可能是函数:msdn.microsoft.com/en-us/library/windows/desktop/ms740481.aspx
-
_imp__shutdown@8!=__imp__shutdown@8 -
看起来该函数属于
libws2_32.a(已链接),但下划线确实不同:-|