2011-04-09 2 views
17

-l 옵션 (예 : -lfoo)을 사용하여 라이브러리에 링크하는 경우 gcc는 정적 라이브러리에 대한 공유 객체를 선호합니다 (둘 다 발견되면 libfoo.so에서 libfoo.a까지 선호). gcc가 정적 라이브러리를 선호하도록 만드는 방법이 있습니까?gcc는 링크 할 때 공유 객체에 정적 라이브러리를 선호합니까?

  • 플러그인이다 : 다음과 같은 제약 나는 응용 프로그램 (X-비행기라는 비행 시뮬레이터)에 대한 플러그인을 만드는거야 :

    내가 해결하기 위해 노력하고있어 문제는 다음이다

  • 실행 환경이 '정상'위치에 있지 않은 공유 객체 (예 : /usr/lib 또는 /usr/lib32)를로드하는 편리한 방법을 제공하지 않는 경우 : 32 비트 공유 객체 형식이어야합니다.
    • 사용자가 0을 설정할 것으로 기대할 수 없습니다.또는 LD_LIBRARY_PATH 내 플러그인과 함께 제공되는 공유 객체를 찾으십시오.
    • X-Plane 실행 환경에서는 플러그인 공유 객체를 동적으로로드하기 전에 플러그인 디렉토리를 "LD_LIBRARY_PATH"에 추가하지 않아 필요한 모든 공유 객체 내 플러그인 공유 객체와 함께
  • 하나 기대할 수 없다 적지 않은

에 (예를 들어, 우분투에서 IA32 - libs와 패키지에 포함되지 않음)입니다 32 비트 공유 객체를 설치하려면 64 비트 사용자 위의 제약 조건을 해결하면 가능한 해결 방법은 생성 된 공유 객체를 링크하는 것입니다 ct는 사용되는 모든 사소한 라이브러리의 정적, 32 비트 버전에 반대합니다. 그러나 이러한 라이브러리를 설치할 때 일반적으로 정적 버전과 동적 버전이 모두 설치되므로 gcc는 정적 라이브러리 대신 공유 객체를 항상 링크합니다. 물론

는, 이동/문제의 공유 객체를 삭제하고, 단지 /usr/lib32 말에 정적 라이브러리를 떠나/제거 작업 주위이지만, 좋은 일

노트되지 않습니다 :

  • 그래, 내가 공유 객체에게 & 라이브러리를 링크하는 방법을 읽어 않았고, 나는 '완전히 정적으로 링크 된 공유 객체를'creatae 위해 노력하고 있지 않다
  • 그래, 내가 -Wl,-static -lfoo -Wl,-Bdynamic,을 시도했지만 예상되는 결과를 가져 오지 않았다
  • 예는, 나뿐만 아니라 -l:libfoo.a을 시도했지만 그것은 .o 파일 인 것처럼이 그냥 -l없이 링크 라인에 .a 파일을 추가 예상 된 결과 중 하나

답변

5

을 가져 오지 않았다.

7

-l 플래그없이 정적 라이브러리의 전체 경로를 지정할 수 있습니다.

gcc ... source.c ... /usr/lib32/libmysuperlib.a ... 
2

그것은 날짜,하지만 작동 할 수 있습니다 : http://www.network-theory.co.uk/docs/gccintro/gccintro_25.html

앞서 언급했듯이

"는,을 지정하여 개별 라이브러리 파일을 직접 연결하는 것도 가능하다 (거의 페이지의 끝) 명령 행에서 라이브러리의 전체 경로 "