与OpenSSL的静态链接

我们有一个项目与
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

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

我正在使用64位proc在Windows 7上运行,如果这可以有任何区别:)

EDIT1
使用VS2010在Win32中编译时出错.

EDIT2
OpenSSL lib(libeay32.lib)也使用nasm编译VS2010(适用于Win32).

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

Edit4
我们也在使用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.请注意,我不太确定它们之间有什么区别).

将此路径添加到链接器>一般>项目的“属性”面板下的Addtionnal Library Directories,并将alloca16.obj添加到Linker>输入> Addtional Dependencies解决了这个问题.

解决__ftol2_sse链接错误

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

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

(如this网站所示)

点赞