我们有一个与 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
可能是 dll
、mt
、xdll
或 xmt
。请注意,我不太确定它们之间有什么区别)。
将此路径添加到项目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/