Компиляция OpenSSL в Windows - сгенерированная LIB использует неверное имя для файлов DLL - PullRequest
1 голос
/ 29 февраля 2020

Я пытаюсь скомпилировать версию OpenSSL 1.1.1d локально.

В связи с моим проектом мне нужно отредактировать windows -makefile.tmp в папке конфигурации. Мне нужно добавить расширения файлов примерно так:

 our $objext = $target{obj_extension} || "_vc10.obj";
 our $resext = $target{res_extension} || "_vc10.res";
 our $depext = $target{dep_extension} || "_vc10.d";
 our $exeext = $target{exe_extension} || "_vc10.exe";
 our $libext = $target{lib_extension} || "_vc10.lib";
 our $shlibext = $target{shared_extension} || "_vc10.dll";

Компиляция успешно завершена, никаких проблем. Но у меня были ошибки всякий раз, когда моя программа использует libcrypto. После проверки сгенерированного libcrypto-1_1_vc10.lib я обнаружил, что библиотека использует .dll с именем

libcrypto-1_1.dll

вместо префикса

libcrypto-1_1_vc10.dll

Я ожидал, что последний будет использоваться, так как, ну, это будет сгенерированный файл .dll. Я также попытался добавить следующие расширения файлов, но это не помогло.

 our $shlibextimport = $target{shared_import_extension} || ".lib";
 our $dsoext = $target{dso_extension} || ".dll";

Я просмотрел сгенерированный Makefile, но я не вижу много, что сгенерирует только libcrypto-1_1 .dll (или, возможно, я еще не знаком с тем, как работает Makefile).

В связи с моим проектом мне нужно сохранить _vc10 в именах файлов.

Существуют ли другие части windows -makefile.tmp или другие конфигурации, которые мне нужно отредактировать? Любые подсказки будут полезны. Заранее спасибо.

1 Ответ

0 голосов
/ 03 марта 2020

После некоторого расследования и благодаря заметкам моих коллег я смог решить эту проблему.

Это может быть хакерский sh способ решить эту проблему, но именно так я исправил свою проблему.

В

util/mkdef.pl

есть функция

sub print_def_file
{
...
my $libname = $name;
...

Обновите значение $ libname до желаемого имени, на которое ссылается libcrypto.lib или libssl.lib

ex:

my $libname = $name . "_vc10";

PS: Если есть другие способы решения этой проблемы, пожалуйста, дайте мне знать.

...