在 Borland C++ Builder、Win 8.1 下构建 OpenSSL
Building OpenSSL under Borland C++ Builder, Win 8.1
我正在按照 INSTALL.W32(各种 OpenSSL 版本)的说明进行操作,通常是:
* Configure for building with Borland Builder:
> perl Configure BC-32
* Create the appropriate makefile
> ms\do_nasm
* Build
> make -f ms\bcb.mak
现在,我在尝试构建时遇到了两种错误:
对于 OpenSSL < 1.0.0
nasmw -f obj -d__omf__ -ocrypto\md5\asm\m5_win32.obj .\crypto\md5\asm\m5_win32.asm
'nasmw' is not recognized as an internal or external command,
operable program or batch file.
否则
Warning W8017 C:\CBuilder5\Include\sys/stat.h 34: Redefinition of 'S_IFMT' is not identical
Warning W8017 C:\CBuilder5\Include\sys/stat.h 35: Redefinition of 'S_IFDIR' is not identical
Error E2227 .\crypto\rand\randfile.c 226: Extra parameter in call to _open in function RAND_write_file
Warning W8053 .\crypto\rand\randfile.c 262: '_chmod(const signed char *,int,...)' is obsolete in function RAND_write_file
*** 1 errors in Compile ***
是的,我对使用 Borland C++ Builder 5 感到遗憾,但我对此无能为力,是的,如果其他一切都失败了,我会考虑 Shining Light 选项。
我不使用 OpenSSL,但从您的文本中得到了一些提示:
-
- 不是 Borland 编译器的默认汇编器
- 需要先下载安装
- (它是免费的,是我过去用过的最好的编译器之一)
您在包含 OpenSSL 或包含顺序错误之前遗漏了一些 #define
- 这就是为什么您收到第一个警告并且很可能还有错误
- 一些库需要添加配置
#defines
(由一些特定的IDE添加)
- 指定使用什么编译器、平台、endianess...
- 在任何包含之前
- 通常如果你以错误的顺序包含,那么定义是为 lib 文件的某些实例定义的,而不是为所有实例定义的
- 所以尝试重新排序包含
- 有时有助于在 lib 之前包含一些其他东西,如 conio、stdio、windows、...
- 确定哪个定义丢失或错误打开
stat.h
- 并在
S_IFMT
周围寻找 #ifdef
#ifndef
语句
最新版本 (1.0.2d) 的解决方案是:
- 从 randfile 中删除额外的参数(如评论所述,这是不必要的),
- 编辑 ms\bcb.mak,搜索
-DMD5_ASM -DSHA1_ASM -DRMD160_ASM
并更改为 -DMD5_NO_ASM -DSHA1_NO_ASM -DRMD160_NO_ASM
。 (SHA、MD5、RMD160有未解决的外部错误,基本上不能用asm编译)
还包括一些其他步骤,但它们仅针对我的环境。
我正在按照 INSTALL.W32(各种 OpenSSL 版本)的说明进行操作,通常是:
* Configure for building with Borland Builder:
> perl Configure BC-32
* Create the appropriate makefile
> ms\do_nasm
* Build
> make -f ms\bcb.mak
现在,我在尝试构建时遇到了两种错误:
对于 OpenSSL < 1.0.0
nasmw -f obj -d__omf__ -ocrypto\md5\asm\m5_win32.obj .\crypto\md5\asm\m5_win32.asm
'nasmw' is not recognized as an internal or external command,
operable program or batch file.
否则
Warning W8017 C:\CBuilder5\Include\sys/stat.h 34: Redefinition of 'S_IFMT' is not identical
Warning W8017 C:\CBuilder5\Include\sys/stat.h 35: Redefinition of 'S_IFDIR' is not identical
Error E2227 .\crypto\rand\randfile.c 226: Extra parameter in call to _open in function RAND_write_file
Warning W8053 .\crypto\rand\randfile.c 262: '_chmod(const signed char *,int,...)' is obsolete in function RAND_write_file
*** 1 errors in Compile ***
是的,我对使用 Borland C++ Builder 5 感到遗憾,但我对此无能为力,是的,如果其他一切都失败了,我会考虑 Shining Light 选项。
我不使用 OpenSSL,但从您的文本中得到了一些提示:
-
- 不是 Borland 编译器的默认汇编器
- 需要先下载安装
- (它是免费的,是我过去用过的最好的编译器之一)
您在包含 OpenSSL 或包含顺序错误之前遗漏了一些
#define
- 这就是为什么您收到第一个警告并且很可能还有错误
- 一些库需要添加配置
#defines
(由一些特定的IDE添加) - 指定使用什么编译器、平台、endianess...
- 在任何包含之前
- 通常如果你以错误的顺序包含,那么定义是为 lib 文件的某些实例定义的,而不是为所有实例定义的
- 所以尝试重新排序包含
- 有时有助于在 lib 之前包含一些其他东西,如 conio、stdio、windows、...
- 确定哪个定义丢失或错误打开
stat.h
- 并在
S_IFMT
周围寻找
#ifdef
#ifndef
语句
最新版本 (1.0.2d) 的解决方案是:
- 从 randfile 中删除额外的参数(如评论所述,这是不必要的),
- 编辑 ms\bcb.mak,搜索
-DMD5_ASM -DSHA1_ASM -DRMD160_ASM
并更改为-DMD5_NO_ASM -DSHA1_NO_ASM -DRMD160_NO_ASM
。 (SHA、MD5、RMD160有未解决的外部错误,基本上不能用asm编译)
还包括一些其他步骤,但它们仅针对我的环境。