2013-07-29 4 views
1

내 애플 리케이션을위한 간단한 플러그인 아키텍처를 만들고 있습니다. 플러그인은 알려진 "get interface"기능을 가진 공유 객체입니다. dlopen/dlsym 등을 통해 .so에 액세스합니다. 상당히 표준입니다. 일부 플러그인에는 .so 파일도로드해야합니다. 이 파일들은 플러그인과 함께 배송 될 수 있지만, 앱을로드 할 위치/방법을 알기 위해 앱이 필요합니다.리눅스 : 런타임시 LD_LIBRARY_PATH를 변경하십시오.

내 질문은 : 특정 라이브러리의 디렉토리를 특정 라이브러리의 디렉토리에 추가하는 방법입니다. 나중에 플러그인을로드 할 예정이므로 응용 프로그램을 시작하기 전에 LD_LIBRARY_PATH를 설정할 수 없습니다. 또는 각 플러그인을 명시 적으로 일종의 매니페스트 파일에 종속성 목록을 제공해야합니다. 그러면 먼저 dlopen()을 사용하여로드 할 수 있습니다. 감사.

편집 : 명확하게하기 위해 플러그인을 시작하기 전에 디렉토리를 알 수 없으므로 LD_LIBRARY_PATH를 설정할 수 없습니다.

+0

플러그인 *'.so' 파일을 필요한 공유 라이브러리'gcc -Wall -O -shared -fPIC plugin.c -lsomelibrary -o plugin.so'와 연결할 수 있고 연결해야합니다. –

+0

나는 이미 그렇게하고 있지만 libsomelibrary.so가 어디에 있는지 알지 못하는 앱 환경에서 런타임에 문제가 발생합니다. 앱을 시작한 후에 지정할 수 있어야합니다. – gimmeamilk

답변

0

this에 따르면 linux는 응용 프로그램을 시작하기 전에 LD_LIBRARY_PATH를 평가하므로 런타임에 변경 한 내용을 인식하지 못합니다.

관련 문제