【问题标题】:Static linking with OpenSSL使用 OpenSSL 进行静态链接
【发布时间】:2011-07-19 19:40:44
【问题描述】:

我们有一个与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 上运行,如果这有什么不同的话:)

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

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

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

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

【问题讨论】:

    标签: c windows openssl linker


    【解决方案1】:

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

    解决 __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 > Addtional Dependencies解决了这个问题。

    解决 __ftol2_sse 链接错误

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

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

    (如this网站所示)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多