我正在尝试在 Visual Studio 2012 中构建一个使用 GnuTLS 的项目。我从网站下载了最新的官方 Windows 版本,并通过lib /def:libgnutls-28.def
在 bin 目录中运行 Visual Studio 命令提示符创建了一个链接库。
添加 a 后typedef long ssize_t
,代码编译正常,但链接失败并出现以下错误:
source_file.obj : error LNK2001: unresolved external symbol _gnutls_free
C:\Path\to\executable.exe : fatal error LNK1120: 1 unresolved externals
我正在调用gnutls_free
释放一些由库分配和返回的内存。如果我删除对 的调用gnutls_free
,则项目链接成功。鉴于这gnutls_free
只是库导出的全局变量(包含函数指针),我不确定为什么访问它会导致对不同符号的未解析引用。我已经证实这gnutls_free
不是#define
任何东西。
作为测试,我尝试这样做gnutls_free_function test = gnutls_free;
也导致链接错误。在 GnuTLS 源代码上运行grep -w -r _gnutls_free .
什么也不返回,所以我很茫然。
任何让这项工作的想法将不胜感激。
编辑:
添加__declspec(dllimport)
到gnutls_free
in的声明gnutls.h
允许链接成功。有没有办法在不维护头文件的自定义版本的情况下实现这一点?