c - 与 OpenSSL 的静态链接

标签 c windows openssl linker

我们有一个与 this 中报道的项目非常相似的项目问题 OpenSSL 是 lib B 的起点。编译可执行文件 (Exe 1) 时,问题是我们遇到了一些似乎与 OpenSSL 链接有关的链接问题。

(cryptlib.obj) LNK2019: unresolved external symbol __alloca_probe_16 referenced in function _OPENSSL_isservice
(bss_file.obj) LNK2001: unresolved external symbol __alloca_probe_16 
(b_print.obj)  LNK2019: unresolved external symbol __ftol2_sse referenced in function _roundv

编译库不会给出任何错误。我很想知道这些函数位于何处,以便我可以在项目中添加正确的引用。

我在 Windows 7 上运行 64 位 proc,如果这有什么不同的话:)

编辑1
这些是使用 VS2010 在 Win32 中编译时的错误。

编辑2
OpenSSL 库 (libeay32.lib) 也使用 nasm 编译用于 VS2010(用于 Win32)。

编辑3
如果有人可以指出使用 VS2010 (vc2010) 或 VS2008 编译器构建 OpenSSL 的链接,那也会有帮助(除了指向 OpenSSL 中的 InstallW** 文件)

编辑4
我们还在使用 Windows DDK 2003,如果它有帮助的话。

最佳答案

以下是我为解决问题所采取的步骤:

解决 __alloca_probe_16 链接错误

因为我们安装了 Visual Studio 2008,所以我们使用了一些 obj 文件来解决这个问题。 alloca16.obj 存在于 Visual Studio 2008 文件夹下的四个不同目录中(应该类似于 C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/crt/src/intel/XXX_lib 其中 XXX 可能是 dllmtxdllxmt 。请注意,我不太确定它们之间有什么区别)。

将此路径添加到项目Properties 面板下的Linker > General > Addtionnal Library Directories 并将alloca16.obj 添加到Linker > Input >附加依赖项 解决了这个问题。

解决 __ftol2_sse 链接错误

这个有点棘手。使用 no-sse2 标志配置 OpenSSL 似乎 可以解决问题...但不是 1.0.0d 版本。我创建了一个新的头文件,其中包含:

extern "C" { 
   long _ftol( double ); 
   long _ftol2_sse( double dblSource ) { return _ftol( dblSource ); }
}

(如 this 网站所示)

关于c - 与 OpenSSL 的静态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6753111/

相关文章:

c - 我无法弄清楚这两个代码块之间的区别

c - 对具有固定数量的零的数组进行随机抽样

c++ - 带 SSL 的简单 gSoap 服务器和客户端

openssl dgst -sha256 -sign 的PHP实现

c - memcpy 取虚拟地址还是物理地址?

c - Sleuthkit——加载共享库时出错

c# - Windows 资源管理器 Crumb-Bar 控件

windows - 命令提示符执行同名文件的顺序(a.bat vs a.cmd vs a.exe)

.net - PowerShell 中的 echo 和 Write-Host 有什么区别?

ssl - 自认证服务器上的 openssl 连接