반응형

c 개발을 하도 오랜만에 하다보니 뭐가 많이 바꼈네요.

전에 분명 잘 빌드되던 코드인데 새로 빌드하려니 에러가 우수수수~~

 

"Multiple definition of" "first defined here" 이런 메세지가 엄청 나오는 겁니다.

 

분명 

#ifndef A_H
#define A_H

 

요런 식으로 중복 컴파일 안되게 다 막아서 잘 되던 코드인데 왜그럴까.

 

검색 해본 결과 gcc 10 부터 뭐가 바꼈다고 합니다.



이제 C에서는 하나의 translation unit 에서만 전역 변수를 정의해야 하며, 변수에 액세스하려는 다른 translation unit에서는 변수를 "extern"으로 선언해야 한다고 하네요.
이제 이 문제를 해결하려면 헤더의 변수를 (예 "int test") "extern int test"로 변경한 다음, c 파일에 "int test"를 선언과 함게 초기화 하여서 변수를 정확히 한 번만 정의해야 한다고 합니다.

 

아니면 빌드 할 때 컴파일 옵션에 -fcommon 를 추가해주면 기존처럼 빌드가 된다고 합니다.

그런데 웬만하면 -fcommon를 쓰는건 추천하지 않는다고 하네요.

반응형

'C & C++ 관련' 카테고리의 다른 글

Protocol Buffers  (0) 2019.11.08
corrupted double-linked list  (0) 2016.12.30
file open close socket send / file copy~~~ example  (0) 2016.02.15
Posted by Real_G