Linux 报错 undefined reference to xxx@openssl_1.0.0

Linux 报错 undefined reference to xxx@openssl_1.0.0

背景

程序迁移(本地 -> 服务器),make之后出现错误“undefined reference to xxx@openssl_1.0.0”

错误代码

wc@r740:~/EDCR/EDCR_C$ make 
Scanning dependencies of target edcr_exec
make[2]: Warning: File 'EstimatingDeltaCompressionRatio.cpp' has modification time 25582 s in the future
[ 33%] Building CXX object CMakeFiles/edcr_exec.dir/EstimatingDeltaCompressionRatio.cpp.o
[ 66%] Building CXX object CMakeFiles/edcr_exec.dir/xdelta/xdelta3.cpp.o
[100%] Linking CXX executable edcr_exec
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `SHA1_Final@OPENSSL_1.0.0'
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `SHA256_Final@OPENSSL_1.0.0'
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `MD5_Final@OPENSSL_1.0.0'
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `SHA1_Init@OPENSSL_1.0.0'
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `SHA1_Update@OPENSSL_1.0.0'
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `MD5_Init@OPENSSL_1.0.0'
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `SHA256_Init@OPENSSL_1.0.0'
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `SHA256_Update@OPENSSL_1.0.0'
/home/wc/EDCR/EDCR_C/./dDelta/libddelta.so: undefined reference to `MD5_Update@OPENSSL_1.0.0'
collect2: error: ld returned 1 exit status
CMakeFiles/edcr_exec.dir/build.make:121: recipe for target 'edcr_exec' failed
make[2]: *** [edcr_exec] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/edcr_exec.dir/all' failed
make[1]: *** [CMakeFiles/edcr_exec.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

主要原因分析

找不到./dDelta/libddelta.so的OPENSSL_1.0.0依赖,应该是版本问题。

查看当前openssl 版本:

wc@r740:~/EDCR/EDCR_C/dDelta$ openssl version -a
OpenSSL 1.0.2u  20 Dec 2019
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/local/ssl"

解决方案

没有选择下载openssl (服务器不是我一个人在用,我不想改掉别人的openssl版本)

首先查看依赖路径

wc@r740:~/EDCR/EDCR_C/$ldd ./dDelta/libddelta.so 
./libddelta.so: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by ./libddelta.so)
	linux-vdso.so.1 (0x00007ffdc37bf000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f96beb5e000)
	libcrypto.so.1.0.0 => /usr/local/lib/libcrypto.so.1.0.0 (0x00007f96be6fa000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f96be4dd000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f96be154000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f96bdd63000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f96bf2f5000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f96bdb5f000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f96bd7c1000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f96bd5a9000)

可以看到路径是/usr/local/lib/libcrypto.so.1.0.0

直接从本地(因为我的代码本地是可以运行的,说明是有这个依赖库的)找到libcrypto.so.1.0.0

levi@LEVI1:~/EDCR/EDCR_C$ ldd ./dDelta/libddelta.so
        linux-vdso.so.1 (0x00007fffcc9ab000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa02ea20000)
        libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fa02e5d0000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fa02e3b0000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa02e020000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa02dc20000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa02f200000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa02da10000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa02d660000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa02d440000)

可以看到位置是/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0,上传到传到服务器的/usr/local/lib/libcrypto.so.1.0.0即可。

可以运行了

wc@r740:~/EDCR/EDCR_C$ make 
Scanning dependencies of target edcr_exec
[ 33%] Building CXX object CMakeFiles/edcr_exec.dir/EstimatingDeltaCompressionRatio.cpp.o
[ 66%] Building CXX object CMakeFiles/edcr_exec.dir/xdelta/xdelta3.cpp.o
[100%] Linking CXX executable edcr_exec
[100%] Built target edcr_exec
蔚天灿雨 的debug 笔记 - 2022/040/26 HITSZ-LEVI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值