opensslcmake编译
A. Mac上安装OpenSSL
Mac系统上原本就内置了OpenSSL,若需要安装或更新,可以通过执行命令“brew install openssl”或者“brew reinstall openssl”来实现。
接下来,在GitHub上找到相应的链接,并使用clone命令将openssl文件夹下载到当前目录中。如果你对命令行操作不熟悉,可以参考廖雪峰老师的教程进行学习。
然后,运行“./config --prefix=/usr/local/openssl -g3”命令,其中可以指定安装目录,使用“-g3”选项可以开启调试模式,方便学习。
执行“make test”命令,检查是否能够成功编译。如果没有问题,执行“make install”命令,即可将OpenSSL安装到指定的目录“/usr/local/openssl”下,安装成功。
如果打算在CLion中使用OpenSSL,需要对CMakeLists.txt文件进行修改,添加相应的配置内容。
修改完成后,通常可以正常运行。以下是一个示例,展示了如何使用SHA1函数(虽然该函数已不再适用)。
若需要使用gcc编译器,需要进一步学习如何编写makefile。
在解决链接库问题时,查阅了相关资料,例如stackoverflow.com/quest...和blog.csdn.net/beyond702...,最终问题得到解决,尽管过程中遇到了许多挑战。
虽然已经能够运行,但仍然存在不少问题。在这种情况下,对问题的理解和解决略显无奈。
B. 海思平台配置toolchain.cmake
交叉编译,在我们的host宿主机器稿知郑上需要生成target目标机器的程序, 使用CMake的Toolchain管理这里的各种环境变量和配置,就很好.
CMake给交叉编译预留了一个变量-- CMAKE_TOOLCHAIN_FILE , 它定义了一个文件的路径, 这个文件就是 toolchain ,我们可以在里面配置 C_COMPILER , CXX_COMPILER ,如果用Qt的话需要更改 QT_QMAKE_EXECUTABLE 以及如果用 BOOST 的话需要更改的 BOOST_ROOT (具体查看相关 Findxxx.cmake 里面指定的路径), 因此,这个 toolchain 内嵌了一系列需要改变并且需要set的交叉环境的设置.
下面归纳一些比较重要的:
下面是一个常规的配置
这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条 -DCMAKE_TOOLCHAIN_FILE=./cross.toolChain.cmake ,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。
稍微大一点的项目都会用到一些外部依赖库或者tool,CMake提供了 FIND_PROGRAM() , FIND_LIBRARY() , FIND_FILE() , FIND_PATH() and FIND_PACKAGE() 等命令来进行外部依赖的搜索查找。
但是有个问题,假如我们在给一个ARM处理器的移动设备做交叉编译,其中需要寻找 libjpeg.so ,假如 FIND_PACKAGE(JPEG) 返回的是 /usr/lib/libjpeg.so ,那么这就会有问题,因为找到的这个 so 库只是给你的宿主机系统(例如一个x86的Ubuntu主机)服务的,不能用于Arm系统。所以你需要告诉CMake去其它地方去查找,这个时候你就需要配置以下的变量了:
在工程中一般通过如下步骤, 进入工程文件, 创建 arm-himix200-linux.cmake 文件, 内容是:
然后创建build文件夹, 进行编译(注意, 需要指定 CMAKE_MAKE_PROGRAM , 不指定的话好像编译有问题...):
在我的 toolchain 文件中,我指定:
因为我项猛戚目中 CMakeLists.txt 中需要查找 OpenSSL 和 curl , 因此会用到CMake自带的 FindOpenSSL.cmake 和 FindCurl.cmake 两个脚本, 他们会用到 Findxxx 命令, 会去我指定的目录去搜键颂索对应的库
https://www.cnblogs.com/rickyk/p/3875334.html
http://www.cmake.org/Wiki/CMake_Cross_Compiling
C. CMake是如何找到OpenSSL的
在实验环境配置中,我们隔离安装OpenSSL至特定目录,确保不会影响系统原有的OpenSSL版本。通过执行相关命令后,我们通过ls操作确认OpenSSL相关文件被正确安置于指定目录。
为了简化依赖配置,我们利用了pkg-config工具。这一工具能根据.pc文件自动构建依赖关系,我们通过OpenSSL提供的openssl.pc文件获取配置信息,为CMake所用。
安装路径下生成的openssl.pc文件包含了关键配置信息,我们使用cat命令查看内容,以了解OpenSSL的具体安装路径和相关设置。在编译engntru工程时,通过指定参数-DCMAKE_PREFIX_PATH,我们将CMake的搜索路径指向了特定的OpenSSL安装目录。
为了进一步解析OpenSSL,我们引入了FindOpenSSL.cmake脚本。此脚本作为CMake调用find_package(OpenSSL REQUIRED)命令时的触发点,它负责调用pkg-config工具,解析openssl.pc文件以获取配置信息。
解析openssl.pc文件后,pkg-config设置了一系列环境变量,如_OPENSSL_INCLUDEDIR和_OPENSSL_LIBDIR,便于后续的find_path、find_library等命令进行查找。通过调用这些命令,并结合设置的环境变量,我们能精确定位到OpenSSL的头文件和库文件。
最终,一系列变量如OPENSSL_INCLUDE_DIR、OPENSSL_LIBRARIES、OPENSSL_VERSION等被设置,这些变量在CMake构建过程中被利用,确保了工程能正确引用和链接OpenSSL。
至此,CMake通过指定的目录、调用的pkg-config工具和FindOpenSSL.cmake脚本,成功地识别并利用了OpenSSL,完成工程构建。这一过程展示了CMake在依赖管理、路径指定及自动化配置方面的强大功能,使得复杂的库依赖问题得以简化处理。
D. 如何正确生成RabbitMQ-C客户端库
1. 下载 rabbitmq-c-master源码
2. 下载 rabbitmq-codegen 源码
3. 将 rabbitmq-codegen 中的内容拷贝到 rabbitmq-c-master 中的 codegen 目录下(如果没有该目录请自行创建)
4.打开openssl目录,修改ms文件夹下的ntdll.mak文件,将CFLAG的/WX选项去掉
5.执行Configure 运行perl Configure VC-WIN32
6.运行 ms\do_ms
7.运行 nmake -f ms\ntdll.mak 执行make进行编译.....nmake -f ms\ntdll.mak 命令将OpenSSL编译成动态库,如果想编译成静态库应使用 nmake -f ms\nt.mak
8.运行 nmake -f ms\ntdll.mak test.检查上一部编译是否成功。正常的话会执行编译后的测试程序
至此OpenSSL在windows下编译完成,编译得到的dll和lib文件位置:静态库libeay32.lib和ssleay32.lib位于out32文件夹下,动态库libeay32.dll,libeay32.lib,ssleay32.dll,ssleay32.lib位于out32dll文件夹下。
9.使用VS2010编译OpenSSL的过程记录
10. 通过 win32 的 cmd 或者 cmake-gui 执行相应的命令进行相关文件生成。
11.生成的sln用vs2010打开 编译 若成功后在librabbitmq文件夹debug中有rabbitmq.1.lib和rabbitmq.1.dll文件
12. 下载的 rabbit-c-master 源码中没有文件 amqp_framing.h 和 amqp_framing.c,这两个文件是通过 codegen.py 和 amqp_codegen.py 产生的。
13.使用 CMake 时路径中最好不要出现中文。