OpenSSL的版本为1.0.1g,在ubuntu下通过CMake仅编译c代码不包括汇编代码,脚本内容如下:

build.sh内容:

#! /bin/bashreal_path=$(realpath $0)
dir_name=`dirname "${real_path}"`
echo "real_path: ${real_path}, dir_name: ${dir_name}"new_dir_name=${dir_name}/build
mkdir -p ${new_dir_name}
cd ${new_dir_name}
echo "pos: ${new_dir_name}"
if [ "$(ls -A ${new_dir_name})" ]; thenecho "directory is not empty: ${new_dir_name}"#rm -r *
elseecho "directory is empty: ${new_dir_name}"
ficd -
# build libcurl
echo "========== start build libcurl =========="
libcurl_path=${dir_name}/../../src/curl
if [ -f ${curl_path}/build/lib/libcurl.so ]; thenecho "libcurl dynamic library already exists without recompiling"
elsemkdir -p ${libcurl_path}/buildcd ${libcurl_path}/buildcmake  -DBUILD_SHARED_LIBS=ON ..make
filn -s ${libcurl_path}/build/lib/libcurl* ${new_dir_name}
echo "========== finish build libcurl =========="rc=$?
if [[ ${rc} != 0 ]]; thenecho "########## Error: some of thess commands have errors above, please check"exit ${rc}
ficd -
cd ${new_dir_name}
cmake ..
makecd -

CMakeLists.txt内容:

PROJECT(OpenSSL_Test)
CMAKE_MINIMUM_REQUIRED(VERSION 3.0)# support C++11
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# support C++14, when gcc version > 5.1, use -std=c++14 instead of c++1y
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")IF(NOT CMAKE_BUILD_TYPE)SET(CMAKE_BUILD_TYPE "Release")SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
ELSE()SET(CMAKE_BUILD_TYPE "Debug")SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")
ENDIF()
MESSAGE(STATUS "cmake build type: ${CMAKE_BUILD_TYPE}")ADD_DEFINITIONS(-DOPENSSL_NO_ASM)
ADD_DEFINITIONS(-D_DEFAULT_SOURCE=1) # fix bss_dgram.c: error: 'const struct in6_addr' has no member named 's6_addr32'MESSAGE(STATUS "cmake current source dir: ${CMAKE_CURRENT_SOURCE_DIR}")
SET(PATH_TEST_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../demo/OpenSSL_Test)
SET(PATH_SRC_OPENSSL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/crypto/openssl)
SET(PATH_SRC_B64_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src)
SET(PATH_SRC_CPPCODEC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/cppcodec)
SET(PATH_SRC_CURL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src/curl)
SET(PATH_SRC_HTTP_PARSER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/./../../src)
MESSAGE(STATUS "path test files: ${PATH_TEST_FILES}")SET(PATH_OPENCV /opt/opencv3.4.2)
IF(EXISTS ${PATH_OPENCV})MESSAGE(STATUS "Found OpenCV: ${PATH_OPENCV}")
ELSE()MESSAGE(FATAL_ERROR "Can not find OpenCV in ${PATH_OPENCV}")
ENDIF()# head file search path
INCLUDE_DIRECTORIES(${PATH_TEST_FILES}${PATH_OPENCV}/include${PATH_SRC_OPENSSL_FILES}${PATH_SRC_OPENSSL_FILES}/include${PATH_SRC_B64_FILES}${PATH_SRC_CPPCODEC_FILES}${PATH_SRC_HPPT_PARSER_FILES}${PATH_SRC_CURL_FILES}/include${PATH_SRC_CURL_FILES}/build
)# build openssl
SET(OPENSSL_SRC_LIST )
FILE(GLOB_RECURSE OPENSSL_SRC_LIST ${PATH_SRC_OPENSSL_FILES}/*.c)
# remove unuse .c file
LIST(REMOVE_ITEM OPENSSL_SRC_LIST${PATH_SRC_OPENSSL_FILES}/crypto/LPdir_nyi.c${PATH_SRC_OPENSSL_FILES}/crypto/LPdir_unix.c${PATH_SRC_OPENSSL_FILES}/crypto/LPdir_vms.c${PATH_SRC_OPENSSL_FILES}/crypto/LPdir_win.c${PATH_SRC_OPENSSL_FILES}/crypto/LPdir_win32.c${PATH_SRC_OPENSSL_FILES}/crypto/LPdir_wince.c${PATH_SRC_OPENSSL_FILES}/crypto/aes/aes_x86core.c${PATH_SRC_OPENSSL_FILES}/crypto/armcap.c${PATH_SRC_OPENSSL_FILES}/crypto/bio/bss_rtcp.c${PATH_SRC_OPENSSL_FILES}/crypto/bn/asm/x86_64-gcc.c${PATH_SRC_OPENSSL_FILES}/crypto/bn/exp.c${PATH_SRC_OPENSSL_FILES}/crypto/conf/cnf_save.c${PATH_SRC_OPENSSL_FILES}/crypto/conf/test.c${PATH_SRC_OPENSSL_FILES}/crypto/cversion.c${PATH_SRC_OPENSSL_FILES}/crypto/des/des_opts.c${PATH_SRC_OPENSSL_FILES}/crypto/des/read_pwd.c${PATH_SRC_OPENSSL_FILES}/crypto/evp/e_aes.c${PATH_SRC_OPENSSL_FILES}/crypto/evp/e_dsa.c${PATH_SRC_OPENSSL_FILES}/crypto/lhash/lh_test.c${PATH_SRC_OPENSSL_FILES}/crypto/pkcs7/bio_ber.c${PATH_SRC_OPENSSL_FILES}/crypto/pkcs7/pk7_enc.c${PATH_SRC_OPENSSL_FILES}/crypto/rc2/rc2speed.c${PATH_SRC_OPENSSL_FILES}/crypto/rc4/rc4.c${PATH_SRC_OPENSSL_FILES}/crypto/x509v3/v3conf.c${PATH_SRC_OPENSSL_FILES}/ssl/ssl_task.c
)INCLUDE_DIRECTORIES(${PATH_SRC_OPENSSL_FILES}/crypto)
INCLUDE_DIRECTORIES(${PATH_SRC_OPENSSL_FILES}/crypto/asn1)
INCLUDE_DIRECTORIES(${PATH_SRC_OPENSSL_FILES}/crypto/evp)
ADD_LIBRARY(openssl STATIC ${OPENSSL_SRC_LIST})# find opencv library
FIND_LIBRARY(opencv_core NAMES opencv_core PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_imgproc NAMES opencv_imgproc PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_highgui NAMES opencv_highgui PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_imgcodecs NAMES opencv_imgcodecs PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_video NAMES opencv_video PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_videoio NAMES opencv_videoio PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_objdetect NAMES opencv_objdetect PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
FIND_LIBRARY(opencv_ml NAMES opencv_ml PATHS ${PATH_OPENCV}/lib NO_DEFAULT_PATH)
MESSAGE(STATUS "opencv libraries: ${opencv_core} ${opencv_imgproc} ${opencv_highgui} ${opencv_imgcodecs} ${opencv_video} ${opencv_videoio} ${opencv_objdetect} ${opencv_ml}")# find dep library
SET(DEP_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build CACHE PATH "dep library path")
MESSAGE(STATUS "dep library dir: ${DEP_LIB_DIR}")
LINK_DIRECTORIES(${DEP_LIB_DIR})# recursive query match files :*.cpp, *.cc, *.c
FILE(GLOB_RECURSE TEST_CPP_LIST ${PATH_TEST_FILES}/*.cpp)
FILE(GLOB_RECURSE TEST_CC_LIST ${PATH_TEST_FILES}/*.cc)
SET(SRC_C_LIST )
LIST(APPEND SRC_C_LIST ${PATH_SRC_B64_FILES}/b64/decode.c)
LIST(APPEND SRC_C_LIST ${PATH_SRC_B64_FILES}/b64/encode.c)
LIST(APPEND SRC_C_LIST ${PATH_SRC_HTTP_PARSER_FILES}/http-parser/http_parser.c)
MESSAGE(STATUS "test cpp list: ${TEST_CPP_LIST} ${TEST_C_LIST} ${SRC_C_LIST}")# build executable program
ADD_EXECUTABLE(OpenSSL_Test ${TEST_CPP_LIST} ${TEST_CC_LIST} ${SRC_C_LIST})
# add dependent library: static and dynamic
TARGET_LINK_LIBRARIES(OpenSSL_Testopenssl${DEP_LIB_DIR}/libcurl.so${opencv_ml}${opencv_core}${opencv_imgproc}${opencv_highgui}${opencv_imgcodecs}${opencv_video}${opencv_videoio}${opencv_objdetect}pthread
)

在https://github.com/fengbingchun/OpenSSL_Test/blob/master/demo/OpenSSL_Test/funset_openssl.cpp 文件中包含了RC4、DES、RSA、MD5的使用测试代码。

GitHub: https://github.com/fengbingchun/OpenSSL_Test

Ubuntu下使用CMake编译OpenSSL源码操作步骤(C语言)相关推荐

  1. Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python)

    MXNet源码版本号为1.3.0,其它依赖库的版本号可参考:https://blog.csdn.net/fengbingchun/article/details/84997490 . 为了通过编译源码 ...

  2. Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(C++)

    MXNet源码版本号为1.3.0,其它依赖库的版本号可参考:https://blog.csdn.net/fengbingchun/article/details/84997490 build.sh脚本 ...

  3. 在Windows和Linux上编译gRPC源码操作步骤(C++)

    gRPC最新发布版本为v1.23.0,下面以此版本为例说明在Windows和Linux下编译过程. Windows7/10 vs2103编译gRPC源码操作步骤: 1. 需要本机已安装Git.CMak ...

  4. java调用caffe_Caffe中master与windows分支差异对比及通过命令提示符编译Caffe源码操作步骤...

    目前GitHub https://github.com/fengbingchun/Caffe_Test  中的caffe还是依赖较老的版本,更新于2015.08.15,commit为09868ac,近 ...

  5. 海思3559A上编译Valgrind源码操作步骤

    注:按照以下步骤可以在海思板子上正常编译valgrind源码并生成valgrind可执行文件,但可能还不能在海思板子上正常使用. 1. 从http://valgrind.org/downloads/? ...

  6. Windows10上使用VS2017编译MXNet源码操作步骤(C++)

    MXNet是一种开源的深度学习框架,核心代码是由C++实现.MXNet官网推荐使用VS2015或VS2017编译,因为源码中使用了一些C++14的特性,VS2013是不支持的.这里通过VS2017编译 ...

  7. Windows10上编译MXNet源码操作步骤(Python)

    1. 按照https://blog.csdn.net/fengbingchun/article/details/84997490  中操作步骤首先在Windows上通过VS2017编译MXNet源代码 ...

  8. 海思3531D上编译FFmpeg源码操作步骤

    从https://github.com/FFmpeg/FFmpeg/releases 下载你需要的版本: 因为ffmpeg编译选项较多,为了更方便的了解有哪些选项,可将编译选项写入到一个文本文件con ...

  9. 海思3559A上编译libjpeg-turbo源码操作步骤

    1. 从https://github.com/libjpeg-turbo/libjpeg-turbo/releases/tag/2.0.2 下载libjpeg-turbo 2.0.2版本: 2. 脚本 ...

最新文章

  1. matlab decomposition filters,MATLAB小波去噪求助(附算法和显示图片)!不知自己哪个地方出了问题,求指点! - 信息科学 - 小木虫 - 学术 科研 互动社区...
  2. 来自MIT的论文答辩、PPT教程,教你轻松应对毕业季和学术会议
  3. 阿里云Redis开发规范
  4. rabbitmq 集群数据存储与单点故障
  5. VTK:几何对象之Cube
  6. F#学习之路(3) 如何组织程序(下)
  7. 区分基于Ant目标的Gradle任务
  8. 英特尔的务实创新之路:实在做技术,赋能开发者 | InfoQ推荐
  9. 微软:Win11很受欢迎、正式版将于秋季如期发布
  10. loadrunner取出字符串的后面几位
  11. 几种常见机器学习距离公式
  12. python爬虫常用模块介绍(1)_python爬虫常用模块介绍(1)
  13. 两年软件开发工作总结及未来展望
  14. 关于泛型中包含级联的List转化为json数据的处理
  15. 关于CSS媒体查询--电脑尺寸大全
  16. 淘宝“蓝鲸计划”细节内容曝光 收编谷歌中国资源
  17. 电力电子技术(16)——直流斩波电路
  18. android源码编译出现No private recovery resources for TARGET_DEVICE解决方法
  19. 仿佛来自虚空,Grothendieck的故事2
  20. Python实现冒泡排序的代码

热门文章

  1. 【PostgreSQL】行变列、非空(CASE WHEN、COALESCE)语句总结
  2. 机器学习中的聚类算法(1):k-means算法
  3. ROS、realsense开发常用命令汇总
  4. ROS Melodic 的依赖关系记录
  5. POJ - 2516 Minimum Cost 最小费用最大流
  6. 【yolo目标检测】(1) yolov3,网络结构Darknet53,特征提取
  7. OpenCV中 Mat 按行或按列合并程序
  8. 占用栅格地图算法的理解
  9. CUDA中grid、block、thread、warp与SM、SP的关系
  10. Udacity机器人软件工程师课程笔记(三十三) - 蒙特卡洛定位算法(MCL)