2010-06-24 6 views
0

나는 libs (.a와 .so) 파일의 묶음에 링크 한 후에 만든 공유 객체 (abc.so)를 가지고있다. 이제이 abc.so는 3 개의 함수를 노출합니다.리눅스에서 공유 객체와의 링크 문제 (콘솔 애플리케이션에서 간단하게 사용)

이제는 abc.so를 사용하여 해당 기능을 호출하는 콘솔 응용 프로그램을 Linux에 작성하고 있습니다. " 'XXXXXXX'에 정의되지 않은 참조"오류 - 내가 해당 응용 프로그램을 구축하려고

나는 잔뜩 얻을. 이제 abc.so는 abd에 의존하므로 참조가 더 깊어졌습니다.

왜 이러한 일이 발생하는지 잘 모르겠습니다. 그것들을 실행 시간에로드해야합니까? Atleast thats 내가 생각한 것 (windows/MSVC 배경에서 오는).

친절하게 도와주세요.

답변

1

여전히 라이브러리 파일에 링크해야하지만 런타임에 심볼을 .so 파일로 링크하여 공유 라이브러리에서로드해야한다고 링커에 알립니다. 링커 명령 줄은 어떻게 생겼습니까?

LD_LIBRARY_PATH도 확인하십시오. 당신은, 당신은 런타임 오류를 얻을 수 있습니다하지 않는 경우

export LD_LIBRARY_PATH=pathToDirWithYourSharedLibrary:$LD_LIBRARY_PATH 

: 공유 라이브러리가 표준 위치 중 하나에없는 경우, /usr/lib처럼, 당신은 할 필요가있다.

2

응용 프로그램이 의존하는 모든 공유 개체 (.so)에 대한 참조와 응용 프로그램을 연결해야합니다. 정적으로 포함 된 아카이브 (.a)와 다시 연결할 필요가 없습니다.

abc.so가 a.so, b.so 및 ca로 빌드 된 경우 abc.so, a.so 및 b.so.

응용 프로그램이 올바르게 링크되어 있으면 공유 객체를 찾을 수 있어야합니다. 'ldd myapp'를 사용하여 공유 객체 종속성을 나열 할 수 있습니다.

my2c