Ubuntu 19.04에 Openssl 1.0.2 설치

Ubuntu 19.04에 Openssl 1.0.2 설치

Linux에서 빌드할 수 있는 Qt/C++로 작성된 애플리케이션 소스가 있습니다.

시스템은 우분투 19.04입니다. 애플리케이션에는 openssl-1.0.2와 같은 일부 이전 버전의 패키지가 필요합니다.

Qt 5.11을 설정하기 위해 설치 후 다음 단계를 실행했습니다.

sudo su -
apt-get install build-essential
apt-get install qtcreator
apt-get install qt5-default
apt-get install git
apt-get install qtwebengine5-dev
apt-get install qtmultimedia5-dev
apt-get install qtscript5-dev
apt-get install open-vm-tools-desktop
cd /opt
wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz  
gunzip openssl-1.0.2l.tar.gz 
tar xf openssl-1.0.2l.tar 
cd openssl-1.0.2l/
./config 
make install
ln -s /opt/openssl-1.0.2l/include/openssl/ /usr/include/openssl
apt install libleptonica-dev
apt-get install tesseract-ocr
apt-get install libtesseract-dev
apt-get install libvlc-dev 

위 단계를 수행한 후 애플리케이션이 Qt에서 컴파일되지만 빌드 시 ld오류가 발생했습니다.

libssl을 찾을 수 없습니다. libcrypto를 찾을 수 없습니다.

제 생각에는 이러한 libs가 .a.so 공유 개체 라이브러리가 아닌 정적 링크 라이브러리로 존재하기 때문이라고 생각합니다.

다음과 같이 빌드를 시도했습니다 .so.

cd /opt/openssl-1.0.2l
./config shared
make install

다음과 같은 경우에는 실패합니다.

make[2]: Entering directory '/opt/openssl-1.0.2l'
[ -z "" ] || gcc -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 -Iinclude \
    -DFINGERPRINT_PREMAIN_DSO_LOAD -o fips_premain_dso  \
    fips_premain.c fipscanister.o \
    libcrypto.a -ldl
make[3]: Entering directory '/opt/openssl-1.0.2l'
make[4]: Entering directory '/opt/openssl-1.0.2l'

/usr/bin/ld: libcrypto.a(gost_eng.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC

/usr/bin/ld: final link failed: nonrepresentable section on output
collect2: error: ld returned 1 exit status
make[4]: *** [Makefile.shared:169: link_a.gnu] Error 1
make[4]: Leaving directory '/opt/openssl-1.0.2l'
make[3]: *** [Makefile:357: do_linux-shared] Error 2
make[3]: Leaving directory '/opt/openssl-1.0.2l'
make[2]: *** [Makefile:310: libcrypto.so.1.0.0] Error 2
make[2]: Leaving directory '/opt/openssl-1.0.2l'
make[1]: *** [Makefile:109: shared] Error 2
make[1]: Leaving directory '/opt/openssl-1.0.2l/crypto'
make: *** [Makefile:287: build_crypto] Error 1

따라서 문제는 Ubuntu 19.04에서 libssl.so 및 libcrypt.so를 생성하기 위해 openssl-1.0.2를 얻는 방법입니다.

답변1

./config --shared명령은 -fPICMakefile의 에 추가되어 CFLAGS모든 C 파일이 공유 라이브러리에 연결하기에 적합한 형식으로 컴파일됩니다.

그러나 기본 정적 빌드 중에 이미 개체 코드(파일)로 컴파일된 파일에는 .o적절한 CFLAGS. 이러한 파일을 공유 라이브러리에 연결하려는 시도는 실패합니다.

해결책은 새 공유 라이브러리 구성을 실행하기 전에 make clean모든 파일을 삭제하도록 실행하는 것입니다..omake install

관련 정보