XERCES-C 2.8 : 공유 라이브러리를로드하는 동안 오류
문제
Red Hat Linux에서 HP UX 서버에서 실행되는 프로그램을 컴파일하려고합니다.
XERCES-C 라이브러리를 사용하여 XML 파일을 구문 분석합니다. 편집은 괜찮지 만 실행하려고하면 다음 메시지를받습니다.
./A.out : 공유 라이브러리를로드하는 동안 오류 : Libxerces-C.SO.28 : 공유 객체 파일을 열 수 없습니다 : 해당 파일 또는 디렉토리가 없습니다.
나는 무슨 일이 일어나고 있는지 이해하기 위해 매우 간단한 프로그램을 썼습니다.
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/TransService.hpp>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
int main(int argc, char* argv[])
{
return 0;
}
다음과 같이 편집했습니다.
g ++ test.cpp -l./xml/xerces-c_2_8_0/lib-lxerces-c -i./xml/xerces-c_2_8_0/include
놀랍게도 파일은 실제로 있습니다.
lib]$ ls
libxerces-c.a libxerces-c.so.28 libxerces-depdom.a libxerces-depdom.so.28
libxerces-c.so libxerces-c.so.28.0 libxerces-depdom.so libxerces-depdom.so.28.0
이견있는 사람 ? 나는 뭔가 빠진 것 같지만 무엇을 모른다.
미리 감사드립니다.
해결책
운영 ldd a.out
링커가 오른쪽을 해결할 수 있는지 확인하십시오.
내보내다 LD_LIBRARY_PATH
현재 폴더를 포함하려면 (경로 변수와 동일한 방식으로) LDD를 다시 확인하십시오.
다른 팁
당신이 원하는 것을하는 좋은 방법은 다음과 같습니다.
g++ test.cpp -Xlinker -R ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include
또는
g++ test.cpp -Wl,-rpath ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include
Xlinker 또는 WL 옵션 특정 링크 옵션을 사용할 수 있으므로 LD_LIBRARY_PATH를 수정할 필요가 없습니다.
런타임 C 라이브러리에 코드에서 정적으로 편집 한 다양한 기호를 찾을 수 있고 평소 /lib 및 /usr /lib 위치에 있어야합니다.
LD_LIBRARY_PATH에 공유 라이브러리의 경로를 추가하여이를 수행합니다. 이 경우, 이것은 컴파일러에 -L 인수를 위해 넣은 것입니다.