Статическое связывание с OpenSSL - PullRequest
4 голосов
/ 19 июля 2011

У нас есть проект, действительно похожий на тот, о котором сообщалось в этом вопросе, где 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-битным протоколом, если это может иметь какое-то значение :)

Редактировать1 Это ошибки при компиляции в Win32 с VS2010.

Edit2 Библиотека OpenSSL (libeay32.lib) также была скомпилирована с nasm для VS2010 (для Win32).

Edit3 Если кто-то может указать ссылку для сборки OpenSSL с компилятором VS2010 (vc2010) или VS2008, это также будет полезно (кроме указания на файлы InstallW ** в OpenSSL)

Edit4 Мы также используем Windows DDK 2003, если это может помочь.

1 Ответ

2 голосов
/ 22 июля 2011

Вот шаги, которые я предпринял для решения проблемы:

Устранение ошибки компоновки __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. Обратите внимание, что я ' я не совсем уверен, в чем разница между ними). ​​

Добавление этого пути к Linker > General > Addtionnal Library Directories под панелью Properties проекта и добавление alloca16.obj к Linker > Input > Addtional Dependencies решило проблему.

Устранение ошибки компоновки __ftol2_sse

Это немного сложно. Настройка OpenSSL с no-sse2 флагом кажется , как будто это решит проблему ... но не с версией 1.0.0d. Я создал новый заголовочный файл, который содержит это:

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

(как показано на этом сайте)

...