-l
옵션 (예 : -lfoo
)을 사용하여 라이브러리에 링크하는 경우 gcc는 정적 라이브러리에 대한 공유 객체를 선호합니다 (둘 다 발견되면 libfoo.so
에서 libfoo.a
까지 선호). gcc가 정적 라이브러리를 선호하도록 만드는 방법이 있습니까?gcc는 링크 할 때 공유 객체에 정적 라이브러리를 선호합니까?
- 플러그인이다 : 다음과 같은 제약 나는 응용 프로그램 (X-비행기라는 비행 시뮬레이터)에 대한 플러그인을 만드는거야 :
내가 해결하기 위해 노력하고있어 문제는 다음이다
- 실행 환경이 '정상'위치에 있지 않은 공유 객체 (예 :
/usr/lib
또는/usr/lib32
)를로드하는 편리한 방법을 제공하지 않는 경우 : 32 비트 공유 객체 형식이어야합니다.- 사용자가 0을 설정할 것으로 기대할 수 없습니다.또는
LD_LIBRARY_PATH
내 플러그인과 함께 제공되는 공유 객체를 찾으십시오. - X-Plane 실행 환경에서는 플러그인 공유 객체를 동적으로로드하기 전에 플러그인 디렉토리를 "LD_LIBRARY_PATH"에 추가하지 않아 필요한 모든 공유 객체 내 플러그인 공유 객체와 함께
- 사용자가 0을 설정할 것으로 기대할 수 없습니다.또는
- 하나 기대할 수 없다 적지 않은
에 (예를 들어, 우분투에서 IA32 - libs와 패키지에 포함되지 않음)입니다 32 비트 공유 객체를 설치하려면 64 비트 사용자 위의 제약 조건을 해결하면 가능한 해결 방법은 생성 된 공유 객체를 링크하는 것입니다 ct는 사용되는 모든 사소한 라이브러리의 정적, 32 비트 버전에 반대합니다. 그러나 이러한 라이브러리를 설치할 때 일반적으로 정적 버전과 동적 버전이 모두 설치되므로 gcc는 정적 라이브러리 대신 공유 객체를 항상 링크합니다. 물론
는, 이동/문제의 공유 객체를 삭제하고, 단지 /usr/lib32
말에 정적 라이브러리를 떠나/제거 작업 주위이지만, 좋은 일
노트되지 않습니다 :
- 그래, 내가 공유 객체에게 & 라이브러리를 링크하는 방법을 읽어 않았고, 나는 '완전히 정적으로 링크 된 공유 객체를'creatae 위해 노력하고 있지 않다 그래, 내가
- 예는, 나뿐만 아니라
-l:libfoo.a
을 시도했지만 그것은.o
파일 인 것처럼이 그냥-l
없이 링크 라인에.a
파일을 추가 예상 된 결과 중 하나
-Wl,-static -lfoo -Wl,-Bdynamic,
을 시도했지만 예상되는 결과를 가져 오지 않았다