모두를 연결하지 않습니다.gcc-4.8.2는 pthread
몇 년 동안 gcc 툴체인을 사용하여 간단한 것을 컴파일하면서, 오늘 나는 이상한 현상에 맞서 달렸다.
일반적인 쿠거투 14.04를 gcc 4.8.2가 설치된 일반 데스크탑 i686 시스템에 설치했습니다. 그런 다음, 로컬 저장소에서 빼내어 잘 코딩 된 것들을 만들려고 노력하면서, 나는 수많은 '정의되지 않은 참조'메시지에 부딪쳤다. 코드가 컴파일되고 링크는 Ubuntu 11.04/gcc 4.5.2에서 잘 실행됩니다. 연결 프로세스 (-Wl, - gcc에 자세한 정보 표시)를 확인하고 작동하는 것으로 생각합니다. 링크 명령에서 지정한 모든 라이브러리를 찾습니다. objdump -t myLib.so은 정확히 예상 할 수있는 기호를 가져 오지만 링커에서는 표시하지 않습니다.
또한 pthread 라이브러리를 검사하면 기호가 붙습니다. 단, 뒤에는 @GLIBC ... stuff가 붙습니다. 지금까지 링커/로더 트릭을 확인하지 않았습니다.
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
static void *fooo (void *xxx) {
char *txt = (char*)xxx;
printf("My job is to print this :'%s'. Bye now!\n", txt);
return 0;
}
int main (int argc, char *argv[]) {
pthread_t thd;
pthread_create(&thd, NULL, fooo, "A POSIX thread");
sleep(1);
return 0;
}
실행 아주 잘 기존 시스템에 바로 말을
./a.out 4.8.2와의 연결 단계에서 깨진다.GCC -l pthread에 fooo.c & &
어떤 아이디어라도 대단히 환영 할 것입니다.
하는 .m
당신이 [링커 순서의 오류 메시지 – sfrehse
가능한 중복을 추가시겠습니까 ..... 그것은 수많은 빌드 프로세스를 나누기, 나는 토마토의 수천 gcc.gnu.org에 대한 준비가 만들어지고있는 것 같아요 - GCC] (http://stackoverflow.com/questions/45135/linker-order-gcc) –
@ JoachimPileborg 한 번만 라이브러리가 프로그램에 연결되어 있기 때문에 나는 추측하지 않습니다. 정확한 오류 메시지가 필요합니다. – sfrehse