2017-12-27 34 views
0

GCC (연결)는 절대 경로로 지정되었을 때 라이브러리를 찾을 수 없다는 것을 나타냅니다. 필자가 원하는 이유는 모든 라이브러리가 절대 경로로 해석되도록하는 빌드 시스템을 갖추고 있으므로 순서가 지정된 고유 항목 집합을 유지할 수 있기 때문입니다. 어떤 사람들은이 버그라고 생각하고, 다른 사람들이 이제까지 일한 사실이 버그라고 생각하고, 고정 된 위치 절대 경로로 라이브러리를 지정하기위한 GCC 동작은 무엇입니까?

g++ (...) -l/path/to/library.so 

나는 버그 리포트를 보았다.

어떤 사람이 함께 경로를 선행해야한다고 논의가 있었다 ':'

어쨌든 작동하지 않았다가.

그래서 나는 그것을 "접두사"GCC에 지정된 라이브러리 경로의 일치와 절대 라이브러리 경로를 잘라 않다면 절대 라이브러리 경로를 절단하는 코드를 넣어 빌드 시스템에서 테스트합니다.

g++ (...) -L/path/to -llibrary.so 

이것은 효과가 있습니다.
나는 또한 이것을 시도했다.

g++ (...) -L/path/to -l/path/to/library.so 

입니다. 9 (조사 중이지만 .. 빌드 스크립트에서 오류가있는 것처럼 보입니다.)

GCC에 지정된 검색 경로가 절대 경로로 지정된 라이브러리의 "접두사"인 경우 라이브러리를 찾은 것 같습니다 . 또한 제공된 라이브러리 경로의 정렬 된 목록에서 첫 번째 히트를 차지한다고 가정합니다.

내 질문.

  • 이 동작을 지원합니까?
  • 빌드 스크립트에서 절대 라이브러리 경로를 자르거나 절대 경로를 전달하는 것이 더이 그것을입니다.

나는 몇 가지 관련 문제는 여기에 가져주의 사항 :

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

이는 "비는 검색"전체 경로가있을 때, 따라서 어떤 런타임 라이브러리 경로를 무시 실행에 "에 불"을 나타냅니다 처형 됐어? 이 올바른지 ? 그렇다면 명령 행에서 전체 경로를 사용하여 라이브러리를 지정하는 것이 적절하지 않음을 의미합니다. 배포시 구축 된 앱 및 관련 라이브러리는 표준 검색 가능 위치에 설치됩니다.

답변

1
난 그냥 명령의 일부로 전체 라이브러리 경로를 통과, -l 사용하지 않는이 경우에 말할 것

:

+0

의미는 접미사를보고 라이브러리입니까? – peterk

+0

@peterk : 아니요, 유닉스는 보통 파일로 충분하지 않습니다. 파일 구조를보고 라이브러리인지 확인합니다. –

+0

@MartinBonner GCC는 해당 스텁'.a' 파일을 자동으로 차례로 검색하지 않겠습니까? – user0042

0

주 /path/to/library.so GCC (기타 옵션) :이 GCC (Raspbian 4.9.2-10) 4.9.2 나는 그것을 위해 만들어진 라이브러리 세트를 얻고 함께.

확인 - 많이 두드리는와 GCC에 인수 분명히 어디 있는지 해결하기 위해 런타임에 사용되는 라이브러리에 하드 코딩 절대 경로에 화상으로 전체 경로를 사용하여 서로 다른 경우

을 테스트. 앱이 서로 다른 장소에있을 수있는 검색 가능한 공유 라이브러리로 배포되기 때문에 바람직하지 않습니다.

-llibmyLib.so does not work with a search path. 
-lmyLib   does work with a search path 
    (with lib prefix and suffix removed - apparently 
     it tries all available suffi and prepends "lib" for it's 
     search by default) 

-이 정보와

-l:libmyLib.so DOES work with a search path, 
       as ':' specifies the file name is not to be altered. 

-l:debug/libmyLib.so DOES work (a subdir under the search path) 
-l:release/libmyLib.so DOES work (a subdir under the search path) 

- (분명히)는 지금 앞으로 이동할 수 있습니다 무엇을 알고!