2012-04-03 2 views
1

여기서 분명한 사실을 놓치고 있다면 용서해주십시오. 다른 플랫폼을위한 일부 응용 프로그램을 개발 중이며 모든 독점 라이브러리는/app/lib에 설치됩니다. 이것을 용이하게하기 위해 각 바이너리의 런타임 라이브러리 경로를 "/ app/lib"로 지정합니다. 이것은 잘 작동합니다. 그러나 링크가 (비록 그 디렉토리가 비어 있더라도) "/ app/lib"경로가 내 빌드 환경에 존재해야합니다. NetBeans를 사용하고 있습니다. 문제가 복잡해졌지만 gcc로 전달되는 "-Wl, -rpath/app/lib"를 볼 수 있습니다.컴파일 타임에 RPATH가 존재해야합니다.

필자는 빌드 환경에서 빈 "/ app/lib"를 만들 필요는 없지만 대상 플랫폼에서 파일 구조를 변경하고 싶지는 않습니다. 빌드 환경에서/app/lib를 삭제하면 빌드 할 때 찾을 수없는 오류가 발생합니다. 링크 시간에 존재하지 않아도 런타임 검색 경로를 지정하는 방법이 있습니까?

+1

'-Wl, -rpath/app/lib'는 잘못된 옵션 사양이며'-Wl, -rpath -Wl,/app/lib'이어야합니다 (어쩌면 다른 방법이있을 수 있지만 작동하지 않습니다. 빌드 호스트에서 dir이 필요함). 빌드 옵션을 잘못 복사 했습니까? – Mat

+0

돌아 왔고 다시 확인했지만 전화가 "gcc -o ... -Wl, -rpath/app/lib ..."로 작성되었음을 확인했습니다. NetBeans가이 메이크 파일을 작성하므로 유효하지 않은 경우 최종적으로 수정해야 할 수도 있습니다. 그러나/app/lib가 내 빌드 환경에 존재하고 결과 바이너리가 런타임에 경로를 사용하면 빌드 프로세스가 성공합니다. – LousyG

+0

이상한 ... 나는 그것이 작동하지 않았지만. 내가 나중에 다시 볼 수 있는지, 조금 이상하게 보인다. – Mat

답변

1

구문은 "-Wl, -rpath -Wl,/app/lib"("-Wl, -rpath,/app/lib"도 사용 가능) 여야합니다. 이것은 NetBeans의 버그입니다. 더 중요하지 않은 이유 (그리고 내가 전에 이것을 알아 차리지 못한 이유)는 링크 타임 검색 경로가 런타임으로 이어지는 것처럼 보입니다. NetBeans는 -rpath와/app/lib 사이에 쉼표를 두지 않으므로/app/lib는 링크 타임 검색 경로로 해석됩니다. 결과적으로 적절한 위치에서 런타임에 종속 라이브러리가 여전히 발견되지만 링크 시간 종속성이므로/app/lib가 없기 때문에 링크가 실패합니다.

1

당신이 찾고있는 옵션이 -Wl,-rpath-link,/path/to/libraries이라고 생각합니다. 한 번에 두 옵션을 모두 사용해야합니다.

링커는 링크 시간에 라이브러리를 찾으려면 -rpath-link을 사용하지만 실행시 사용할 수 있도록 -rpath 값을 이진 코드로 인코딩합니다.

관련 문제