>백엔드 개발 >Golang >Go 애플리케이션을 Oracle 라이브러리와 정적으로 연결할 수 없는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Go 애플리케이션을 Oracle 라이브러리와 정적으로 연결할 수 없는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-26 19:53:15931검색

Why Can't I Statically Link My Go Application with Oracle Libraries, and How Can I Fix It?

정적 빌드 중에 Oracle 라이브러리를 찾을 수 없습니다

Ubuntu에서 Oracle 라이브러리를 사용하여 정적 Go 실행 파일을 생성하려고 시도하는 동안 오류가 발생했습니다. 그들을 연결하려고합니다. 성공적인 동적 빌드에도 불구하고 필수 파일이 올바른 위치에 있음에도 불구하고 정적 컴파일러는 Oracle 라이브러리를 찾을 수 없다고 보고했습니다.

해결 방법

  1. Oracle 클라이언트는 일반적으로 이 파일과 함께 제공되지 않으므로 $ORACLE_HOME/bin/relink 도구를 사용하여 libclntst.a 라이브러리를 생성합니다. 이 정적 라이브러리에는 정적 링크에 필요한 누락된 기호가 포함되어 있습니다.
  2. libclntst.a 라이브러리를 사용하여 애플리케이션을 컴파일합니다. 해결되지 않은 기호가 없는지 확인합니다.
  3. nm 도구를 활용하여 미해결 누락 기호의 소스를 식별합니다.
  4. 예를 들어 Oracle 11gR2의 경우 다음 컴파일 명령이 성공적으로 실행됩니다. 모든 종속성 해결:
/usr/bin/c++ -Wall -ggdb3 -fPIC \
 CMakeFiles/opassgen.dir/opassgen.cpp.o \
 CMakeFiles/opassgen.dir/dbutils.cpp.o \
 CMakeFiles/opassgen.dir/common.cpp.o  \
 CMakeFiles/opassgen.dir/crypto.cpp.o  \
 n.o  -o opassgen                      \
 -rdynamic -static-libgcc -L. -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic \
 /home/oracle/ivan/openssl-1.0.1t/libcrypto.a  \
 /oracle/u01/db/11.2.0.4/lib/libclntst11.a     \
 /oracle/u01/db/11.2.0.4/lib/libippdcmerged.a  \
 /oracle/u01/db/11.2.0.4/lib/libippsmerged.a   \
 -Wl,--whole-archive libtrotl.a -Wl,--no-whole-archive \
 -lpthread -ldl

이 명령에는 종속성을 해결하기 위한 추가 정적 라이브러리가 포함되어 있습니다. libippdcmerged.a 및 libippsmerged.a.

요약하자면 정적 링크에는 모든 종속성을 수동으로 해결해야 하며, 이로 인해 일반적으로 동적 링크에 포함되지 않는 추가 라이브러리를 포함해야 할 수도 있습니다.

위 내용은 Go 애플리케이션을 Oracle 라이브러리와 정적으로 연결할 수 없는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.