2017-10-29 7 views
4

내 정적 사용자 라이브러리에서 pthread를 사용하고 싶지만 종속 프로젝트는 '-lpthread'를 사용하는 각 프로젝트에 추가하지 않으면 연결되지 않습니다.gcc를 사용하면 정적 라이브러리에 -lpthread 라이브러리를 어떻게 포함시킬 수 있습니까?

내 사용자 라이브러리에 '-lpthread'를 지정하고 싶습니다. 사실, 나는 그 일을했지만 아무 것도하지 않습니다. 나는 아직도 그렇지 않으면 내가

Invoking: GCC C++ Linker 
g++ <....> 
/usr/bin/ld: /home/xxx/git/xxx/xxx.CUtil/Debug/libxxx.CUtil.a(EzyThread.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5' 

를 얻을 나는 또한 그것을 사용하여 프로젝트의 종속 관계를 포함해야하는 경우 IMO는, 내 자신의 사용자 라이브러리의 목적을 패배 종속 프로젝트 '-lpthread'추가해야합니다; pthread 대신에 다른 내부 메커니즘을 사용하기로 결정했다면 어떻게 될까요?

나는 내가 원하는 것을 MS VC에

#pragma comment(lib, "SomeOtherStuff.lib") 

를 사용했습니다 -하지만 난 GCC 환경에서 지금입니다. 나는 #pragma comment(lib, "xxx.lib") equivalent under Linux?을 체크 아웃했는데 감정이 좋고 사용 가능한 정보가 부족한 것으로 보였다. gcc 나 다른 의존적 인 프로젝트에서 '-lpthread'를 지정하지 않으려면 비슷한 방법이 있습니까? 나는 C가 OOP가 아니라 각 종속성이 사용자 라이브러리가 구현되는 방법을 알아 내야 만하는 이유를 알고 있습니까?

(#pragma 메소드와 같은 것이 '-lpthread'보다 길지 않도록하십시오.) 사용자 라이브러리의 #pragma 또는 이에 해당하는 메커니즘은 한 번 입력되었지만 '-lpthread'는 잠재적으로 수백 번이 필요하며 사용자 라이브러리의 기본 메커니즘이 변경되면 여러 번 변경해야합니다.)

+1

AFAIK 할 수 없습니다. – immibis

+0

이런 종류의 것은 일반적으로 빌드 시스템에 위임됩니다. –

+0

'.o' 파일의 압축을 풀고 lib 도움말에 추가하겠습니까? 'ar t/usr/lib/x86_64-linux-gnu/libpthread.a', [man ar] (https://linux.die.net/man/1/ar) –

답변

0

정적 라이브러리는 실제로 개체 파일의 벙어리 아카이브 위에 작은 소스입니다. 특히 다른 라이브러리에 대한 종속성을 추적하지 않습니다.

gcc 또는 다른 종속 프로젝트에서 '-lpthread'를 지정하지 않으려면 다른 방법이 있습니까? ... '-lpthread는'잠재적으로 수백 배를 필요로하고, 사용자 라이브러리의 기본 메커니즘이 보통 (빌드 시스템 수준에서 수행 유닉스 세계에서

을 변경하는 경우 여러 번 변화하는 요구 예를 들어 Autoconf를 다루는 경우 LIBS 환경 변수를 적절히 설정하면됩니다. 내 사용자 라이브러리에서의 #pragma, 또는 이에 상응하는 메커니즘이 한 번 프라그의

의미를 입력했는지

참고 잘하지만 지정되어 있지 않습니다. 우선 서로 다른 소스 파일에 두 개의 pragma가있는 경우 어떤 라이브러리를 먼저 연결해야합니까?