在 Windows 中编译 OpenSSL - 生成的 LIB 使用错误的 DLL 文件名称

Compiling OpenSSL in Windows - generated LIB uses wrong name for DLL files

我正在尝试在本地编译 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(或者我可能还不熟悉如何生成生成文件有效)。

由于我的项目,我需要在文件名中保留 _vc10

是否还有 windows-makefile.tmp 的其他部分或我需要编辑的其他配置? 任何线索都是有益的。提前谢谢你。

经过一番调查,感谢同事们的指点,我得以解决这个问题。

这可能是解决此问题的一种 hackish 方法,但这就是我解决问题的方法。

util/mkdef.pl

有一个函数

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

将 $libname 值更新为 libcrypto.lib 或 libssl.lib

引用的所需库名

例如:

my $libname = $name . "_vc10";

PS:如果有其他方法可以解决这个问题,请告诉我。