나는 여러가 .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
을 사용해 보았습니다.
코드가 컴파일되지만 모든 곳에서 경고가 표시됩니다. gcc 대신 clang을 사용할 때의 요점은 더 나은 오류 메시지를 얻는 것이므로 다른 방향으로 진행됩니다. 시도해 줘서 고마워. –
+1 우리 소프트웨어의 5 C 소스 파일에 대한 해결 방법을 제공했습니다. – Shirkrin