Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >conan入门(二十一):解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c

conan入门(二十一):解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c

作者头像
10km
发布于 2022-04-13 04:33:40
发布于 2022-04-13 04:33:40
95900
代码可运行
举报
文章被收录于专栏:10km的专栏10km的专栏
运行总次数:0
代码可运行

conan: 解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c

今天在用conan使用MinGW编译openssl/1.1.k,执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ conan install openssl/1.1.1k@ -s compiler=gcc -s compiler.version=5.2 --build missing

在编译到crypto/dso/dso_win32.c时报了一大堆错误,大概是这些:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crypto/dso/dso_win32.c: In function 'win32_load':
crypto/dso/dso_win32.c:98:5: error: unknown type name 'HINSTANCE'
   98 |     HINSTANCE h = NULL, *p = NULL;
      |     ^~~~~~~~~
crypto/dso/dso_win32.c:98:19: warning: initialization of 'int' from 'void *' makes integer from pointer without a cast [-Wint-conversion]
   98 |     HINSTANCE h = NULL, *p = NULL;
      |                   ^~~~
crypto/dso/dso_win32.c:106:9: warning: implicit declaration of function 'LoadLibraryA' [-Wimplicit-function-declaration]
  106 |     h = LoadLibraryA(filename);
      |         ^~~~~~~~~~~~
crypto/dso/dso_win32.c:107:11: warning: comparison between pointer and integer
  107 |     if (h == NULL) {
      |           ^~
crypto/dso/dso_win32.c:129:11: warning: comparison between pointer and integer
  129 |     if (h != NULL)
      |           ^~
crypto/dso/dso_win32.c:130:9: warning: implicit declaration of function 'FreeLibrary' [-Wimplicit-function-declaration]
  130 |         FreeLibrary(h);
      |         ^~~~~~~~~~~
crypto/dso/dso_win32.c: In function 'win32_unload':
crypto/dso/dso_win32.c:136:5: error: unknown type name 'HINSTANCE'
  136 |     HINSTANCE *p;
      |     ^~~~~~~~~
crypto/dso/dso_win32.c: In function 'win32_bind_func':
crypto/dso/dso_win32.c:163:5: error: unknown type name 'HINSTANCE'
  163 |     HINSTANCE *ptr;
      |     ^~~~~~~~~
crypto/dso/dso_win32.c:166:9: error: unknown type name 'FARPROC'
  166 |         FARPROC f;
      |         ^~~~~~~
crypto/dso/dso_win32.c:182:13: warning: implicit declaration of function 'GetProcAddress' [-Wimplicit-function-declaration]
  182 |     sym.f = GetProcAddress(*ptr, symname);
      |             ^~~~~~~~~~~~~~

通过Google搜索找到下面这个ISSUE: 《dso_win32.c error #2979》,搞明白了原因

确实,在Windows下conan编译openssl的时候,是需要msys2的,见下图

也就是说msys2自带的gcc会导致上面的编译错误,但Windows下编译openssl又确实需要在msys2提供的bash环境下执行bash编译脚本

所以需要通过环境变量CC,CXX指定使用的MinGW-w64编译器

方案一

直接在上面的conan install命令基础上通过-e来定义环境变量CC指定自己Windows系统下安装的MinGW C编译器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ conan install openssl/1.1.1k@ -s compiler=gcc -s compiler.version=5.2 --build missing -e CC=P:\MinGW\mingw64\bin\gcc.exe 

方案二

方案一虽然简单,但是如果每次用MinGW编译都要敲这么长一串命令也是挺麻烦的,上面的这些参数都可以通过配置文件(profile)定义。比如我的Windows平台默认安装的编译器是Microsoft Visual Studio 2015,所以我的默认profile为

default

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[settings]
os=Windows
os_build=Windows
arch=x86_64
arch_build=x86_64
compiler=Visual Studio
compiler.version=14
build_type=Release
[options]
[build_requires]
[env]

那么,我们可以在default的基础上新增一个名为mingw的配置文件如下

mingw

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 从默认配置文件(default)继承默认设置
include(default)

[settings]
# 修改编译器类型
compiler=gcc
# 根据自己系统上安装的MinGW版本,定义编译器版本号
# 通过gcc -dumpversion 获取MinGW版本号
compiler.version=5.2
compiler.libcxx=libstdc++11
build_type=Release
[options]
[build_requires]
[env]
# 定义环境变量强制指定C编译器
CC=P:\MinGW\mingw64\bin\gcc.exe 
# 定义环境变量强制指定C++编译器
# openssl 为纯C项目,不需要C++编译器
#CXX=P:\MinGW\mingw64\bin\g++.exe

因为mingw 配置文件中定义了所有必须的参数,所以命令行执行时就相对简单了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ conan install openssl/1.1.1k@ -pr mingw --build openssl

参考资料

[question] Compiling OpenSSL with MinGW on Windows

《dso_win32.c error #2979》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/04/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
conan入门(二十三):Windows下MinGW编译libcurl
Windows平台用 conan 使用MinGW编译器编译libcurl,要如下执行
10km
2022/04/13
9040
​openssl Android编译指南
打开根目录下的build.info, 注释下面几行, 在Line:590~594, 否则会有类似错误提示 ${LDCMD:-g++} ld: unknown option: --sysroot=.
望天
2019/09/16
7.1K1
​hostguest nativelangsys及uniform cui cross compile system
本文关键字:windows host targetting at linux,Compile for linux on windows using mingw64,Cross-compiling on Windows for Linux
minlearn
2020/09/27
6720
conan入门(二十二):编译 openssl要求python 3.7以上版本
怎么会有语法错误呢?我对python并不精通,问了熟悉python的同事,才知道上面这个语法,在python3.7以后才支持,而我当前的python版本是3.4,果然升级python到最新版本再试,问题解决。
10km
2022/04/13
4830
windows下安装MinGW及C++的环境配置
  使用windows开发神器visio studio。这种方法比较简单,直接下载一个最新的vs安装就行。不单单是C++,C、C#、VB等都可以开发。
全栈程序员站长
2022/09/07
2.7K0
macOS:编译boost静态库 error:implicit declaration of function ‘out_printf‘ is invalid in C99
在执行./bootstrap.sh失败了。 查看./bootstrap.log,如下:
10km
2021/04/19
2K1
关于opentelemetry-cpp社区对于C++ Head Only组件单例和符号可见性的讨论小记
前段时间有人在 opentelemetry-cpp 提出了api组件在动态库中单例无法工作的 issue ,( https://github.com/open-telemetry/opentelemetry-cpp/issues/1520 ) 。
owent
2023/03/06
1.2K0
MinGW安装教程——著名C/C++编译器GCC的Windows版本[通俗易懂]
本文主要讲述如何安装 C语言 编译器——MinGW,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用。
全栈程序员站长
2022/07/23
40.8K1
MinGW安装教程——著名C/C++编译器GCC的Windows版本[通俗易懂]
使用mingw.bat编译openssl-1.0.1c生成dll
1,下载openssl1.0.1c源码http://www.openssl.org/source/openssl-1.0.1c.tar.gz
用户11293412
2024/10/09
1840
conan入门(二十六):使用make编译erpc/erpcgen(makefile)
conan是个包管理工具,不仅仅支持cmake编译,还支持很多常用的构建工具如configure/make,msbuild,VisualStudo,meson,本文以NXP的Embedded RPC为例说明conan中如何使用make来构建项目。
10km
2022/04/13
1.2K0
Milvus 编译环境演进
Milvus 代码库分为了 C++ 和 Go 两个部分,Go 部分负责系统主体架构、分布式系统、存储/查询链路等,C++ 部分负责查询、索引引擎专注于单机场景下的高性能,两者之间通过 cgo 接口调用。
Zilliz RDS
2023/01/09
1.7K0
thrift:在cygwin下编译C library for win32(lib/c_glib)
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/80380998
10km
2019/05/25
1.5K0
C/C++常见gcc编译链接错误解决方法
用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest ("-Wl"表示是传递给链接器ld的参数,而不是编译器gcc/g++的参数。) 1) 下面是因为没有指定链接参数-lz(/usr/lib/libz.so,/usr/lib/libz.a ) /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_uncompress': /home/software/mysql-5.5.24/mysys/my_compress.c:122: undefined reference to `uncompress' /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_compress_alloc': /home/software/mysql-5.5.24/mysys/my_compress.c:71: undefined reference to `compress' 2) 下面是因为没有指定编译链接参数-pthread(注意不仅仅是-lpthraed) /usr/local/mysql/lib/mysql/libmysqlclient.a(charset.c.o): In function `get_charset_name': /home/zhangsan/mysql-5.5.24/mysys/charset.c:533: undefined reference to `pthread_once' 3) 下面这个是因为没有指定链接参数-lrt /usr/local/thirdparty/curl/lib/libcurl.a(libcurl_la-timeval.o): In function `curlx_tvnow': timeval.c:(.text+0xe9): undefined reference to `clock_gettime' 4) 下面这个是因为没有指定链接参数-ldl /usr/local/thirdparty/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': dso_dlfcn.c:(.text+0x4c): undefined reference to `dlopen' dso_dlfcn.c:(.text+0x62): undefined reference to `dlsym' dso_dlfcn.c:(.text+0x6c): undefined reference to `dlclose' 5) 下面这个是因为指定了链接参数-static,它的存在,要求链接的必须是静态库,而不能是共享库 ld: attempted static link of dynamic object 如果是以-L加-l方式指定,则目录下必须有.a文件存在,否则会报-l的库文件找不到:ld: cannot find -lACE 6) GCC编译遇到如下的错误,可能是因为在编译时没有指定-fPIC,记住:-fPIC即是编译参数,也是链接参数 relocation R_x86_64_32S against `vtable for CMyClass` can not be used when making a shared object 7) 下面的错误表示gcc编译时需要定义宏__STDC_FORMAT_MACROS,并且必须包含头文件inttypes.h test.cpp:35: error: expected `)' before 'PRIu64' 8) 下面是因为在x86机器(32位)上编译没有指定编译参数-march=pentium4 ../../src/common/libmooon.a(logger.o): In function `atomic_dec_and_test': ../../include/mooon/sys/atomic_gcc.h:103: undefined reference to `__sync_sub_and_fetch_4' 9) 下列错误可能是因为多了个“}” error: expected d
一见
2018/08/10
8K0
keepalived 编译报错undefined reference to `OPENSSL_init_crypto'
查看check_ssl.c 发现应该是识别到 1.1.0的版本了, 但使用的库的信息是1.0.0的
大大刺猬
2023/07/13
1.3K0
C/C++ 构建系统,我用 xmake
它的语法简洁易上手,对新手友好,即使完全不会 lua 也能够快速入门,并且完全无任何依赖,轻量,跨平台。
ruki
2021/05/18
2.8K0
C/C++ 构建系统,我用 xmake
windows平台python 2.7环境编译安装zbar
最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家。
黯然销魂掌
2018/09/27
1.1K0
解决Qt5.12版本OpenSSL不能用问题: qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization faile
使用QNetworkAccessManager报错: qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization faile
DS小龙哥
2022/01/12
3.8K0
解决Qt5.12版本OpenSSL不能用问题: qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization faile
【阿星的学习笔记(1)】如何在windows安裝Theano +Keras +Tensorflow並使用GPU加速訓練神經網路
今天开始,Lady向各位介绍一个朋友阿星(Ashing)以及他的机器学习读书笔记! 阿星也是我们手撕深度学习算法微信群的热心群友!接下来,Lady我也会陆续分享这个微信群里大家讨论的话题。 本篇文
GPUS Lady
2018/04/02
1.6K0
【阿星的学习笔记(1)】如何在windows安裝Theano +Keras +Tensorflow並使用GPU加速訓練神經網路
conan入门(二十四):通过CONAN_DISABLE_CHECK_COMPILER禁用编译器检查
最近工作的一个单片机项目项目,用了一款不知名的芯片,坑爹的开发商提供的编译器中有C++编译器,但是不能正常工作。好在我们的项目是纯C项目不需要C++编译器,只要在项目的cmake脚本中project命令指定为Cproject($NAME LANGUAGE C),这个坑就暂且绕过。
10km
2022/04/13
9880
xmake v2.3.9 发布, 新增独立 Xrepo C/C++ 包管理器
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
ruki
2020/12/14
1.2K0
xmake v2.3.9 发布, 新增独立 Xrepo C/C++ 包管理器
推荐阅读
相关推荐
conan入门(二十三):Windows下MinGW编译libcurl
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验