
나는 상용 소프트웨어 프로그램을 중심으로 작성한 .cpp 코드를 가지고 있으며 사용할 수 있는 대규모 C++ 라이브러리 클래스를 제공했습니다. 공유 개체 중 하나를 libtdfdll.so
내 실행 파일에 정적으로 연결하고 싶습니다 . 그들은 나에게 파일을 제공하지 않습니다 libtdfdll.a
. .so
저는 g++ 4.8.3을 사용하여 SLES 11.4에서 이 작업을 수행하고 있습니다.
내 cpp 파일은process_tdf_v12.5.cpp
작동하는 기본 동적 링크를 위해 지금 수행하는 작업은 다음과 같습니다.
g++ process_tdf_v12.5.cpp -I../tdflibs12.5/include -L../tdflibs12.5/lib -ltdfdll -lm
이는 컴파일/링크에도 작동합니다.
g++ process_tdf_v12.5.cpp -I../tdflibs12.5/include ../tdflibs12.5/libtdfdll.so -lm
하지만 실행 파일을 실행하면
error while loading shared libraries: libtdfdll.so.1: cannot open shared object file: No such file or directory
내가 하나 만들지 않는 이상
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/ron/tdflibs12.5/lib
나는 이것을하고 싶지 않습니다.
process_tdf_v12.5.cpp
내 실행 파일 중 하나에 특정 버전의 12.5가 포함되어 tdflibs12.5/lib/libtdfdll.so
올바른 12.5 버전을 다른 시스템에 복사 libtdfdll.so
하거나 문제를 일으키는 다른 .so 버전에 대해 걱정할 필요가 없기를 원합니다 . 어떻게 해야 하나요?
.so 파일만 얻은 경우 이를 사용하여 정적 링크를 완료할 수 있나요?
또한 다른 파일을 정적으로 연결하고 싶지 않고 이 libtdfdll.so
파일 만 연결하고 싶습니다.
답변1
이는 불가능합니다. 공유 라이브러리에는 정적 라이브러리에 포함된 일부 정보가 부족합니다. XY 문제가 있는 것 같습니다. 공유 라이브러리를 정적으로 링크하는 방법을 묻고 있지만 실제로 필요한 것은 애플리케이션을 배포하는 더 나은 방법입니다. 나는 다음과 같은 것을 사용하는 것이 좋습니다밍크. 공유 라이브러리를 실행 파일로 묶어 정적으로 링크된 라이브러리처럼 보이게 합니다.
게다가플랫 팩. 현재 겪고 있는 문제를 해결하지 못할 수도 있지만 (단순한 공유 라이브러리가 아닌) 애플리케이션과 종속성을 제공하는 매우 이식성이 뛰어난 방법을 제공합니다.