2010-06-10 1 views
4

응용 프로그램은 Firefox 플러그인 ($ HOME/.mozilla/plugins에서로드 됨)이므로 LD_LIBRARY_PATH를 설정하는 래퍼 스크립트는 쉬운 옵션이 아닙니다.공유 라이브러리가있는 GNU/Linux Firefox 플러그인 (루트 액세스가없는 설치용)

내가 아는 한 RPATH는 $ HOME을 참조 할 수 없으며 절대 경로 일 수 있습니다.

Firefox는 ~/.mozilla/plugins에서 플러그인을 dlopen하려고하지만 (사용자 홈 디렉토리의 어딘가에 설치된 공유 라이브러리에 의존하기 때문에) 실패합니다.

파이어 폭스 주위에 래퍼 (LD_LIBRARY_PATH와 함께)를 제공하기 위해 파이어 폭스 메뉴 항목 수정하기가 너무 어렵습니다.

공유 라이브러리에 의존하는 표준 파이어 폭스로드 플러그 인을 만들기 위해 설치 프로그램 스크립트는 (루트 액세스없이) 어떻게해야합니까?

  1. 종속성을 제거하기 위해 .so에 모든 것을 포함시켜야합니까?
  2. 설치 단계에서 설치 스크립트를 사용하여 링크를 완료하거나 RPATH를 패치해야합니까? $ORIGIN/lib-
+0

설치중인 플러그인에 감지 된 경로를 패치하는 'patchelf'를 설치 프로그램에 포함 시켰습니다. –

+0

'patchelf'와 하드 코드 된 경로를 $ ORIGIN으로 해킹을 제거했습니다. –

답변

4

설정 RPATH 때문에 로더는 내 파일에 상대적 라이브러리를 찾습니다.

이 스크립트는 Wl,-rpath,'$ORIGIN/lib' ($ 메이크 두 배로해야한다)을 추가하여 GCC 불구하고 링커에 지정 될 수 있습니다 $HOME/.mozilla/plugins/lib/

RPATH에 $HOME/.mozilla/plugins/myplugin.so 및 라이브러리에 플러그인 압축을 푼도 patchelf에 의해 컴파일 후 변경 될 수 있습니다.

+0

그건 그렇고, $ ORIGIN /../ ..으로 $ HOME에 갈 수 있습니다. –

+0

예, 이미 그렇게하고 있습니다. –