DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: wish0913
今日帖子: 11
在线用户: 9
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/4/24 13:48:14
标题:
有没有编译成功64位OpenSSL3.X的弟兄,请教下如下错误该怎么绕过去 浏览:464
加入我的收藏
楼主: 之前有个用1.0.8版本开发的工具,最近想用3.0的FIPS重写并升级到64位,网上没有BCC64编译的lib和OpenSSL.exe,所以只得自己编译。
一番折腾和搜索后,现在卡在这里:
"bcc64" -q -c -tM -O2  -I"." -I"include" -I"providers\common\include" -I"providers\implementations\include" -D"OPENSSL_PIC" -D"OPENSSLDIR=\"H:\\thirdparts\\openssl-3.3.0_bcc64\\release_bcc64\\ssl\"" -D"ENGINESDIR=\"H:\\thirdparts\\openssl-3.3.0_bcc64\\release_bcc64\\lib\\engines-3\"" -D"MODULESDIR=\"H:\\thirdparts\\openssl-3.3.0_bcc64\\release_bcc64\\lib\\ossl-modules\"" -D"OPENSSL_BUILDING_OPENSSL" -D"WIN64_LEAN_AND_MEAN" -D"OPENSSL_SYS_WIN64" -D"L_ENDIAN" -D"DSO_WIN64" -D"_stricmp=stricmp" -D"_strnicmp=strnicmp" -D"_malloca=malloc" -D"_freea=free" -D"_setmode=setmode" -D"NDEBUG"  -c -ocrypto\ct\libcrypto-lib-ct_policy.obj "crypto\ct\ct_policy.c"
crypto\ct\ct_policy.c:
In file included from crypto\ct\ct_policy.c:18:
In file included from crypto\ct/ct_local.h:14:
include\openssl/x509v3.h:184:9: error: type name requires a specifier or qualifier
        X509_NAME *directoryName;
        ^
c:\program files (x86)\embarcadero\studio\23.0\include\windows\sdk\wincrypt.h:2901:45: note: expanded from macro 'X509_NAME'
#define X509_NAME          ((LPCSTR) 7)
...
根据错误信息,应该是LPCSTR没有定义导致,但是我查了下代码手工加入windows.h了也没起作用。

32位在很久前就编译成功了,但是64位总有这样那样的问题,发issue去问好像在国际上用CBuilder的人都很是小众,回复一直很少,偶尔有几个还抱着BCB6呢。
唉,3.3不行3.0也是一个鸟样,同样的错误。
----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2024/4/24 15:04:27
1楼: 既然是64位, 怎么又有x86的路径?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/4/24 17:44:56
2楼: https://slproweb.com/products/Win32OpenSSL.html
----------------------------------------------
--
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/4/24 18:43:57
3楼: 感谢楼上兄弟,不过这个包的lib/MinGW目录下的库文件格式是COFF的,而BCC64的库文件都是ELF的(Kylix起就是),格式不兼容
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2024/4/24 20:09:06
4楼: 对象文件转换器 此实用程序可用于在所有 32 位和 64 位 x86 平台的 COFF/PE、OMF、ELF 和 Mach-O 格式之间转换对象文件。可以修改对象文件中的符号名称。可以跨平台构建、修改和转换函数库。可以转储对象文件和可执行文件。还包括一个非常好的拆解...
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/4/24 21:33:20
5楼: 楼主要干啥?用动态库不行么?
而且高版本的delphi是可以支援COFF的,实在不行还可以找一个转换工具。
----------------------------------------------
--
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2024/4/25 1:35:58
6楼: 直接把 LPCSTR 替换成它应有的样子不就行了?
----------------------------------------------
只有偏执狂才能生存!
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/4/25 8:14:16
7楼: @4楼,objconv很多年前就不更新了,对COFF64和ELF64的支持都有问题
@5楼,OpenSSL是根据机器在编译时优化的,通用版性能不行还缺少某些特性(编译时没打开)
至于改代码把LPCSTR改成“const char*”,这行倒是能过去,但还有新错误,应该是某些必要的类型头文件没包含进去,。。。
先不搞了,有时间再研究!
----------------------------------------------
-
作者:
男 wg961423 (麦子仲肥) ★☆☆☆☆ -
盒子活跃会员
2024/4/25 10:20:33
8楼: 如果用12.1的bcc64x来编译呢?或者可以试下12.1的Win64 Modern来直接用VC的lib
----------------------------------------------
-
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/4/25 10:41:20
9楼: 楼上,BCC64X可以的,已经用它通过了1.1.1w,3.X个别代码小调下应该也没问题。

受到6楼启发,我在路上突然想到直接改LPCSTR不行那把头文件名字临时改掉,找到最终引用的某个头文件不就行了么,像探雷一样一步步试验后,最后在err.h里简单地加上一行#include <windows.h>就过去了。

一直到最后一步生成openssl.exe,这个文件可以生成ssl证书,很重要,但我就倒在了这一步。
编译没问题,但Link时出现了大量重复定义错误:
Error: Public symbol 'IN6_ADDR_EQUAL' defined in both module H:\THIRDPARTS\OPENSSL-3.3.0_BCC64\APPS\LIB\OPENSSL-BIN-CMP_MOCK_SRV.OBJ and H:\THIRDPARTS\OPENSSL-3.3.0_BCC64\APPS\OPENSSL-BIN-ASN1PARSE.OBJ
Error: Public symbol 'IN6_IS_ADDR_UNSPECIFIED' defined in both module H:\THIRDPARTS\OPENSSL-3.3.0_BCC64\APPS\LIB\OPENSSL-BIN-CMP_MOCK_SRV.OBJ and H:\THIRDPARTS\OPENSSL-3.3.0_BCC64\APPS\OPENSSL-BIN-ASN1PARSE.OBJ
...

再进一步验证了一下,1.1.1w和3.0用BCC64都报这个错误。
离成功也就一步之遥。。。

新的BCC64X可以通过在linker后加命令:-Wl,--allow-multiple-definition -Wl,--Wno-multiple-definition,成功编译。
但BCC64,我试过没效果,有哪位过路的大佬可以解决的?
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2024/4/25 18:02:39
10楼: C++就是这样,编译很折磨人的。我也有一次是在回家路上想到编译方法的,而且纯属灵感,不是必然就能想到。

对于你现在的问题,查一下LIB的PATH设置?只设置一个,这样Linker就只能去一个地方找。
或者查一下Output设置,只能在一个地方生成。
----------------------------------------------
只有偏执狂才能生存!
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/4/25 18:22:46
11楼: 搞定,我把生成的库文件发到gitee了,有需要的兄弟可以下载和免-费使用。同时支持BCC32C、BCC64和BCC64X:
https://gitee.com/intehandsome/openssl_cbuilder

稍有不完美的是生成库文件时不得不改了一波龙SDK里的两个头文件,加了个宏进行判断(使用不受影响不用改)

再次感谢各位热心兄弟和大佬,提供了好思路!
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2024/4/25 20:26:16
12楼: 修改了啥,讲讲啊。OpenSSL还是很重要的,只要是涉及到network和加密的地方,几乎哪里都有它。
----------------------------------------------
只有偏执狂才能生存!
作者:
男 tony2u (tony2u) ★☆☆☆☆ -
普通会员
2024/4/26 12:45:36
13楼: 难得是问题定位,改造往往只要一两行代码,这次是基本的inline用法:
C:\Program Files (x86)\Embarcadero\Studio\23.0\include\windows\sdk\ws2ipdef.h:
C:\Program Files (x86)\Embarcadero\Studio\23.0\include\windows\sdk\ws2tcpip.h:
#if defined(__CODEGEARC__)
#if defined(__clang__)
#define WS2TCPIP_INLINE static inline /* Avoid public symbol defined in both module */
#elif defined(__cplusplus)
#define WS2TCPIP_INLINE __inline 
#else
#define WS2TCPIP_INLINE
#endif
#elif defined(_MSC_VER)
#define WS2TCPIP_INLINE __inline
#else
#define WS2TCPIP_INLINE extern inline /* GNU style */
#endif
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行31.25毫秒 RSS