2010-11-25 2 views
11

동일한 이름을 가진 정적 및 동적 라이브러리 libclsocket.a 및 libclsocket.so가 있습니다. 링크하려는 라이브러리를 지정하면 간단히 라이브러리로 -lclsocket을 입력하면됩니다. 내 프로그램은 완벽하게 정상적으로 작동하지만 어떤 라이브러리를 사용합니까? 정적 라이브러리 또는 동적 라이브러리? 내 친구에게 내 프로그램을 제공하고 싶습니다. 릴리스에 라이브러리를 포함해야하는지 잘 모르겠습니다. C++, codelite, pcLinuxOS 2010리눅스에서 어떻게 정적 또는 동적 라이브러리에 연결하는지 알 수 있습니까?

+7

GCC로 빌드 할 때 '-static' 플래그를 지정하지 않았기 때문에 공유 객체에 연결하는 것이 가장 가능성이 큽니다. @Soo Wei Tan이 대답 했으므로 이진 파일에'ldd'를 사용하여 런타임 링커 의존성을 확인할 수 있습니다. – birryree

+0

원하는 라이브러리를 정적으로 링크하도록 지정할 수 있습니까? – TheFuzz

+1

라이브러리의 전체 이름을 전달하여 선택적으로 정적 링크 할 수 있습니다. 'gcc -o OutFile <소스 파일> -l : libclsocket.a'처럼. ':'에주의해라. 그것은 매우 중요하다. 이 동작에 대한 공식 문서를 찾고 싶습니다. 그러나'gcc'의 맨 페이지에는이 사용법이 언급되어 있지 않습니다. – birryree

답변

5

ldd을 실행 파일에서 실행하고 동봉 된 .so가 의존성 목록에서 필요에 따라 감지되는지 확인할 수 있습니다.

ldd 맨 페이지는 here입니다.

+0

공유 라이브러리에 연결 중입니다. 그렇다면 어떻게 정적 라이브러리에 링크 할 수 있습니까? 또한 공유 라이브러리를 기본값으로 가정합니다. – TheFuzz

2

-static 플래그를 사용하면 모든 구성 요소가 고정됩니다. -l에는 공유 라이브러리가 포함될 수 있습니다. 따라서 정적 라이브러리 파일 이름을 지정하면 (예 : /usr/lib/libfoo.a으로, 앞에 -l이 붙지 않음) 원하는 효과를 얻을 수 있습니다.

관련 문제