2011-09-01 3 views
8

나는 여러가 .c 파일에서 컴파일 된 일부 완벽하게 아름다운 C99 코드를 가지고, 나는 연타 2.7로 컴파일 할 때, 나는 아주 이상한 오류를 얻을 :Clang이 표준 C 헤더 파일에서 함수를 복제하지 못하게하는 방법은 무엇입니까?

/usr/include/bits/stdio.h:77: multiple definition of `putchar' 
a2test.o:/usr/include/bits/stdio.h:77: first defined here 

무엇 일어나는 것은을 GNU libc의 헤더가 <stdio.h>에 대한 파일은 putchar을 포함한 특정 기능을 extern __inline__으로 선언하며, 어떤 이유로 clang은 .o 파일에 정의를 넣습니다. 그런 다음 링커가 중복 된 정의를 볼 때, 그것은 어둡다.

구성상의 문제가 있다고 생각됩니다. 데비안 lenny와 함께 제공되는 clang 2.7을 사용하면 모든 것이 컴파일됩니다. 하지만 내가 가르치는 수업에서는 소프트웨어가 Red Hat Enterprise Linux 5에서 실행되어야하고 시스템 관리자는 소스에서 clang 2.7을 구축했습니다. (우리는 hello world를 컴파일 할 수 없기 때문에 2.9를 사용하지 않습니다. 최신 버전을 빌드 할 수 없어 이후 버전을 사용하지 않습니다.)

해결 방법을 찾고 있습니다. 그게 나를 컴파일 할 수있게 해줄거야. 명령 줄 옵션 또는 clang을 재구성하는 방법으로이 나쁜 일을하지 않습니다.

나는 이미 -U__USE_EXTERN_INLINES을 사용해 보았습니다.

답변

6

LLVM bug 5960은 clang의 C99 지원과 RHEL 5에 설치된 GNU libc의 이전 버전 간의 상호 작용으로이 문제가 발생 함을 보여줍니다. RHEL 5가 설치된 사용자의 경우 clang -std=c99 -Ox을 사용할 수 없습니다. x > 0에 해당합니다.

4

Try -std = gnu89; 정말 이상적은 아니지만 해결 방법으로 충분해야합니다.

+0

코드가 컴파일되지만 모든 곳에서 경고가 표시됩니다. gcc 대신 clang을 사용할 때의 요점은 더 나은 오류 메시지를 얻는 것이므로 다른 방향으로 진행됩니다. 시도해 줘서 고마워. –

+0

+1 우리 소프트웨어의 5 C 소스 파일에 대한 해결 방법을 제공했습니다. – Shirkrin

관련 문제