2012-10-04 4 views
0

우분투 12.04에 뵘 쓰레기 수집기를 사용합니다. 12.04 LTS에서 :어떻게 프로그램을 고려

/tmp/cc7GcTfU.o: In function `main': 
main.c:(.text+0xe): undefined reference to `GC_malloc' 
collect2: ld returned 1 exit status 

그것은 10.04 사이에 12.04처럼 보이는 그들은 malloc에 ​​교체 컴파일하지 않는 라이브러리를 변경했습니다. 이 문제를 해결받을 수있는 간단한 방법이

[...] However, it does not work as a drop-in malloc(3) replacement. 

있습니까 : 또는 내가 libgc1c2 패키지의 설명을 말한다 생각입니까? (libgc를 수동으로 다시 컴파일하는 것보다 간단합니다 ...)

답변

1

내 질문에 답하려면 실제로 Boehm GC 라이브러리는 12.04에서 사용했던 것과 같은 방식으로 작동합니다. 문제는 GCC가 그렇지 않다는 것입니다! GCC는 --as-needed에 기본값으로 시작하고,이 줄의 시작 부분에있는 경우 완전히 -lgc 삭제합니다. 이것은 매우 중요한 변화입니다 !!

솔루션 끝으로 -lgc를 이동하는 것입니다 :

gcc test.c -lgc 

또는 추가

gcc -Wl,--as-needed -lgc test.c 
+0

항상 중요 한 링커 명령 줄에서 라이브러리의 순서. 라이브러리가 아카이브 (.a 파일) 인 경우 라이브러리를 볼 때 라이브러리의 코드로 링크됩니다. 라이브러리가 .o 파일보다 앞에 있으면 라이브러리에서 필요하지 않은 것을 볼 수 있습니다. –

+0

이것은 컴파일러에 따라 다릅니다. GCC는 모든 것을 연결하도록 기본 설정했습니다. 이제 기본값은'--as-needed'입니다. – Max