OpenSSL Linux动态库编译程序
时间:2021-04-06

静态数据库编译程序

                ./config 

                make

                make install


动态库编译程序

                ./config shared

                make

                make install



难题1)relocation R_AARCH64_ADR_PREL_PG_HI21              

以前编译程序进行静态数据库,沒有清除整洁,发生难题

命令    ./config shared make

打错

usr/bin/ld: libcrypto.a(gost_eng.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `stderr@@GLIBC_2.17' which may bind externally can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: libcrypto.a(gost_eng.o)(.text 0x4f0): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `stderr@@GLIBC_2.17'
/usr/bin/ld: final link failed: bad value
./stdio.h:477:1: error: 'gets' undeclared here (not in a function)
sed -i '/gets is a security hole/d' \
    gettext-{runtime/gnulib-lib,tools/{gnulib-lib,libgettextpo}}/stdio.in.h


处理

make clean

./config shared


难题2)undefined reference to

undefined reference to `GENERAL_NAME_free@libcrypto.so.10'
undefined reference to `SSL_get_verify_result@libssl.so.10'
undefined reference to `SSL_CTX_set_default_passwd_cb_userdata@libssl.so.10'
undefined reference to `sk_num@libcrypto.so.10'
undefined reference to `SSL_CTX_ctrl@libssl.so.10'
undefined reference to `CRYPTO_set_dynlock_lock_callback@libcrypto.so.10'
undefined reference to `SSL_accept@libssl.so.10'
undefined reference to `SSL_new@libssl.so.10'
undefined reference to `SSL_CTX_set_cipher_list@libssl.so.10'

依照以上的make install实际操作,就可以处理该难题,不然必须根据-lssl -lcrypto连接特定的openssl库,另外必须特定openssl的头文件名称

事例

g   UploadMessageService_server.skeleton.cpp uploadmessageservice.cpp  thriftcom_types.cpp thriftcom_constants.cpp  pushmessageservice.cpp -lthrift-0.9.0 -lpthread -I /home -I ./  -L. -L /home/dong/3thrdparty/openssl-1.0.2j   -fpermissive  -o output -DHAVE_NETINET_IN_H