문제

C ++ 라이브러리와 C ++ 응용 프로그램이 라이브러리에서 내보내는 기능 및 클래스를 사용하려고합니다. 라이브러리는 잘 구축되며 응용 프로그램은 컴파일하지만 연결되지 않습니다. 내가받는 오류는이 형식을 따릅니다.

App-Source-File.cpp :(. Text+0x2fdb) :`lib-namespace :: getstatusstr (int)에 대한 정의되지 않은 참조.

라이브러리의 클래스는 링커에 의해 잘 해결 된 것처럼 보이지만 자유 함수 및 내보내려있는 데이터 (코사인 조회 테이블과 같은)는 위의 오류가 항상 발생합니다.

Ubuntu 8.04 (Hardy)를 사용하고 있으며 최신 Ubuntu 패키지로 최신 정보입니다.

라이브러리를 연결하라는 명령은 (다른 라이브러리가 제거 된)입니다.

g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so

응용 프로그램을 연결하라는 명령은 (다른 라이브러리가 제거 된)입니다.

g++ -fPIC -Wall -O3  -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question

마지막으로, 문제의 기호가 제대로 내보내는 것으로 보입니다.

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
도움이 되었습니까?

해결책

nm 출력의 ubre _zn3lib-namespace12getstatusstrei 이전 U는 기호가 한정되지 않은 도서관에서.

어쩌면 그것은 잘못된 네임 스페이스에 정의되었을 것입니다 : 당신은 lib-namepace에서 그것을 부르는 것처럼 보이지만 다른 사람에서 정의 할 수 있습니다.

다른 팁

오랜 시간이 지났지 만 -L 옵션이있는 LIB를 지정하면 LIB 접두사를 건너 뛰지 않습니까?

(아래 예제를 쉽게 읽으려면 이름을 "lib-in-question.so"에서 "libfoobar.so"로 변경했습니다)

g++ -fPIC -Wall -O3  -L~/project/lib/release -lfoobar

또는

g++ -fPIC -Wall -O3  ~/project/lib/release/libfoobar.so
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top