非root用户,ubuntu执行成功,centos7失败,安装cmake-3.24.2 报openssl相关错误undefined reference to `EVP_MD_CTX_new‘

执行常规3件套

../configure --prefix=/home/xiaonuo/my_soft/install 2>&1 | tee my_11_configure.log

make -j 32 2>&1 | tee my_22_make.log

make install 2>&1 | tee my_33_make_install.log

,在 ubuntu22 上,没有出现问题,但 centos7 在make时出现了错误,报错如下:
在这里插入图片描述
我自个将openssl安装在了~/soft/install 目录下,执行检查也没问题

openssl version

在这里插入图片描述
按道理最新版本不会缺失上面的定义。

添加VERBOSE=1参数,查看make的具体语句执行过程

make VERBOSE=1 -j 32 2>&1 | tee my_22_make.log

在文件中搜索ssl,可以发现语句具体执行的是链接到usr/lib64下的libssl.solibcrypto.so
随便选取其中的一条指令,如下:

cd /public1/home/sch4862/soft/build_src_source/cmake-3.24.2/my_build/Tests/CMakeLib && /public1/home/sch4862/soft/build_src_source/cmake-3.24.2/my_build/Bootstrap.cmk/cmake -E cmake_link_script CMakeFiles/testAffinity.dir/link.txt --verbose=1
/public1/home/sch4862/soft/install/bin/g++ -O3 -DNDEBUG CMakeFiles/testAffinity.dir/testAffinity.cxx.o -o testAffinity  ../../Source/libCMakeLib.a ../../Source/kwsys/libcmsys.a ../../Utilities/std/libcmstd.a ../../Utilities/cmexpat/libcmexpat.a /usr/lib64/libcrypto.so /usr/lib64/libssl.so ../../Utilities/cmlibarchive/libarchive/libcmlibarchive.a ../../Utilities/cmliblzma/libcmliblzma.a ../../Utilities/cmzstd/libcmzstd.a ../../Utilities/cmbzip2/libcmbzip2.a ../../Utilities/cmcurl/lib/libcmcurl.a ../../Utilities/cmzlib/libcmzlib.a  ../../Utilities/cmnghttp2/libcmnghttp2.a ../../Utilities/cmjsoncpp/libcmjsoncpp.a ../../Utilities/cmlibuv/libcmlibuv.a -ldl -lrt ../../Utilities/cmlibrhash/libcmlibrhash.a -lpthread

语句大致为进入xx目录,执行link.txt里的命令。
继续将make的日志都查看一下,发现执行的都是link.txt下的命令,link.txt里就是第二行执行的命令。

link.txt内容:

/public1/home/sch4862/soft/install/bin/g++ -O3 -DNDEBUG CMakeFiles/testAffinity.dir/testAffinity.cxx.o -o testAffinity  ../../Source/libCMakeLib.a ../../Source/kwsys/libcmsys.a ../../Utilities/std/libcmstd.a ../../Utilities/cmexpat/libcmexpat.a /usr/lib64/libcrypto.so /usr/lib64/libssl.so ../../Utilities/cmlibarchive/libarchive/libcmlibarchive.a ../../Utilities/cmliblzma/libcmliblzma.a ../../Utilities/cmzstd/libcmzstd.a ../../Utilities/cmbzip2/libcmbzip2.a ../../Utilities/cmcurl/lib/libcmcurl.a ../../Utilities/cmzlib/libcmzlib.a  ../../Utilities/cmnghttp2/libcmnghttp2.a ../../Utilities/cmjsoncpp/libcmjsoncpp.a ../../Utilities/cmlibuv/libcmlibuv.a -ldl -lrt ../../Utilities/cmlibrhash/libcmlibrhash.a -lpthread

接下来我们只需要将这些文件中有/usr/lib64/libcrypto.so /usr/lib64/libssl.so的都删除,不指定固定路径,在最后添加-lcrypto -lssl(centos7 有存在这两个链接不加到最后出现报错的情况,保险起见,放到了最后)

在cmake源码根目录 (后续结果表明可以直接在自己的编译目录里) 调用 tree -f | grep link.txt,查找文件夹下所有的link.txt具体路径,依次进行替换
比如上面的内容修改后如下:

/public1/home/sch4862/soft/install/bin/g++ -O3 -DNDEBUG CMakeFiles/testAffinity.dir/testAffinity.cxx.o -o testAffinity  ../../Source/libCMakeLib.a ../../Source/kwsys/libcmsys.a ../../Utilities/std/libcmstd.a ../../Utilities/cmexpat/libcmexpat.a ../../Utilities/cmlibarchive/libarchive/libcmlibarchive.a ../../Utilities/cmliblzma/libcmliblzma.a ../../Utilities/cmzstd/libcmzstd.a ../../Utilities/cmbzip2/libcmbzip2.a ../../Utilities/cmcurl/lib/libcmcurl.a ../../Utilities/cmzlib/libcmzlib.a  ../../Utilities/cmnghttp2/libcmnghttp2.a ../../Utilities/cmjsoncpp/libcmjsoncpp.a ../../Utilities/cmlibuv/libcmlibuv.a -ldl -lrt ../../Utilities/cmlibrhash/libcmlibrhash.a -lpthread -lcrypto -lssl 

更改完毕然后再重新make,执行成功。

原因分析

centos7 /usr/lib64下的openssl版本较老,而cmake固定链接/usr/lib64下的openssl库,导致了错误,将相关命令改成 -lcrypto -lssl 解决。
ubuntu
!](https://img-blog.csdnimg.cn/6547a46f338a42748aecff1ab7f79494.png)

centos 7
在这里插入图片描述

不足

其实这些文件是在configure后产生的,尝试在make 生成 link.txt 之前进行相关修改,没能成功。

逃。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值