0

이 작품은 :컴파일 오류 GCC -lpthread 위치

gcc -lpthread a.o b.o -o a 

과 같은 몇 가지 오류를 보여줍니다

gcc a.o b.o -o a -lpthread 

이 작동하지 않습니다 Makefile 생성 함

gcc -lpthread a.o b.o -o a 

다음 중 어떤 것도 작동하지 않습니다.

아이디어가 있으십니까?

PS : - -pthread이 필요한 일부 컴파일시 옵션을 가능하게 할 수있다 내가 GCC 4.6.3/우분투 모두의 12.04

답변

2

먼저 사용하고, 당신은 pthread와 함께 컴파일하지 않을 때 -lpthread-pthread를 사용하려면 멀티 쓰레딩 환경에서 작동하는 프로그램.

문제는 명령 줄에 실제로 해당되지 않습니다. GNU ld에서 문제가 있습니다. GNU ld-lXXX 옵션을 발생시, libXXX.so 또는 libXXX.a에 의해 정의 된 모든 기호를 읽고, 수표 그 상징의 명령 줄에서 -lXXX 옵션 앞에 지정 된 파일 을 언급하고, 나머지에 대해 잊어 버린 된 경우 기호의.

즉, 개체 파일 및 라이브러리의 명령 줄 순서가 링커의 동작을 변경합니다.

컴퓨터가 실제로 제한된 메모리를 사용했을 때 이것은 합리적 이었을지 모르지만, 요즘은 잊혀진 시간대의 바보 같은 인공물이며, 이미 수정 된 상태 여야합니다.

물론 동일한 기호를 정의하는 여러 라이브러리와 연결하는 문제가 발생할 수 있지만 이러한 경우 예상되는 동작을 허용하는 확실한 방법은 분명 있습니다.


결론 : ld 여전히 이전 컴퓨팅 시대에 살고 있기 때문에 (gcc에 의해 호출되는) GNU ld에 대한 질문에서 첫 번째 명령이 유효합니다.

을 pthread 관련 프로그램을 컴파일 할 때 모두 -pthread을 사용하십시오.

+0

고맙습니다. -pthread로 변경하면 옵션의 소유 여부와 관계없이 작동합니다. –

+0

'-pthread'는 그것을 연결하는 특별한 경우를 추가합니다. 이것은 요즘 옵션 주문이 더 이상 좋지 않다는 것을 증명합니다. – Griwes