Oracle 데이터베이스에 연결하는 정적 바이너리를 빌드하려고 시도했지만 오류가 발생했습니다. 연결 단계에서. 문제에 대한 자세한 분석 및 해결 방법은 다음과 같습니다.
/usr/bin/ld: cannot find -lclntsh
이 오류는 컴파일러가 Oracle 라이브러리 libclntsh.a를 찾을 수 없음을 나타냅니다.
구성에 이미 동적 버전의 라이브러리가 포함되어 있습니다. (-L/usr/lib/oracle/12.1/client64/lib -lclntsh) 동적 링크의 경우 정적 링크의 경우 정적 버전(.a)을 사용해야 합니다.
Oracle 라이브러리를 사용하여 정적 CGO 실행 파일을 빌드하려면 다음을 따라야 합니다. 단계:
Oracle의 relink 도구 사용: $ORACLE_HOME/bin/relink 도구를 사용하여 libclntst.a라는 정적 라이브러리를 생성합니다.
$ORACLE_HOME/bin/relink all
앱 연결 libclntst.a: 애플리케이션을 정적 라이브러리와 연결해 보십시오:
CGO_ENABLED=1 go build -work -x -ldflags " -v -linkmode external -extldflags -static" -L/usr/lib/oracle/12.1/client64/lib oracletest.go
예를 들어 다음과 같습니다. 명령은 정적으로 링크된 실행 파일을 성공적으로 빌드했습니다. 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
Oracle 라이브러리를 사용하여 정적으로 링크된 CGO 실행 파일을 구축하는 것은 여러 라이브러리 종속성으로 인해 어려울 수 있습니다. 제공된 솔루션을 따르면 Oracle 데이터베이스에 연결되는 정적 바이너리를 성공적으로 생성할 수 있습니다.
위 내용은 Linux/Ubuntu의 CGO에서 Oracle 데이터베이스에 연결할 때 정적 연결 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!