aes 암호화 라이브러리 컴파일도중 EVP_aes_256_ecb 심볼 ld: 치명적 기호 참조 오류에 관해서...

morolty의 이미지

./XXXXX.c -lpthread -lposix4 -lnsl -lm -lsocket  -lelf -lkvm -lkstat -lnileacct -lcrypt -ldl -lgen
정의되지 않음                   첫번째 참조된
 기호                       파일:
EVP_aes_256_ecb                     /var/tmp//ccgAtksU.o
ld: 치명적¸기호 참조 오류. /XXX/XXXXX/XXXXXXXXX에 출력이 기록되지 않음
collect2: ld returned 1 exit status
make: *** [AgentProc] Error 1

오류가 발생하였는데요...

동적 라이브러리 링크 중 나오는 에러가 맞는건가요?

계속 들여다본 결과 EVP_aes_256_ecb 심볼이 프로토타입만 선언되어있고 실제 함수가 없어서 나는에러 같은데요..(추정)

이를 해결하기 위해선 실제 함수가 선언되어 있는 라이브러리를 gcc의 -l 옵션으로 지정해줘야 하는건가요?

어디에 있는 어떤 라이브러리를 포함 시켜야 하는걸까요?

아니면 혹시 방향이 잘못되어 있는지 질문 드립니다..

ymir의 이미지

EVP_aes_256_ecb 라면 openssl 쓰시는거 같은데.. openssl 의 crypto library 이름은 libcrypto.so 죠.
-lcrypto 를 추가하셔야 할 것 같네요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

morolty의 이미지

지금 openssl-1.0.0g 인데요..
라이브러리로는 libcrypto.a, libssl.a 두개의 아카이브 파일이 있습니다.
ar -x 로 풀어보니 .so가 아니라 .o파일들이네요 ...
-lcrypto는 라이브러리가 없구요 ㅜㅜ..
사실 이게 같은 시스템의 다른 프로그램에 적용되어 있는걸 뜯어와서 붙이는 중이라 제대로 동작하는 프로그램의 Makefile로부터 라이브러리도 다 카피 페이스트 했습니다..

-lnsl -lm -lsocket -lcrypt -ldl -lgen 이에요..
분명 동일한 아카이브 파일을 가져와서 동일하게 컴파일 했는데 안되니 미치겠습니다 ㅜㅜ

ymir의 이미지

일단 EVP_aes_256_ecb 는 openssl 의 libcrypto 에 있는 evp 를 위한 함수 맞을거구요.
자기 소스에서 libcrypto 를 사용하지 않더라도, 다른 library 에서 참조하는 바람에 dependency 가 걸려 있을 수도 있습니다.
ldd 로 찍어 보면 누가 필요로 하는지 나올겁니다.

어쨌든 openssl library 를 shared 로 빌드하고 그 경로에 맞게 -L 넣어주고 -lcrypto 를 추가하는 걸로 문제가 해결 될 것 같은데요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

morolty의 이미지

에고 해결됐습니다 감사합니다!