문제
OSX에서 링커 오류가 발생합니다 (동일한 코드의 경우 Linux 또는 FBSD의 오류 없음) :
ld: duplicate symbol _dbg_char in .libs/liboekernel_la-OEK_get.o and .libs/liboekernel_la-OEK.o
오류에 나열된 2 개의 리브는 내 것이지만 기호는 그렇지 않습니다. C ++ Flint는 '_dbg_char'가 두 개의 리브에 있음을 확인하지만 어디에서 왔는지 잘 모르겠습니다.
ID _DBG_CHAR의 방법에 대한 트릭, 전략, 명백한 답변은 대단히 감사하겠습니다.
프로젝트는 Libtool/Autotools 및 GCC 4.01을 사용하고 있습니다
해결책
DBG_CHAR을 정의하는 로깅 / 디버그 매크로를 찾았습니다.dbg_ ## t
'. 수정은 그것을 정적으로 만드는 것이 었습니다. 교훈:
- OSX는 기호 이름에 _을 추가합니다. Linux에서 NM을 실행하고 코드베이스를 검색하려고 생각하지 않은 동일한 기호를 보았습니다. "
dbg_
" 대신에 "_dbg_
" - OSX는 불평 할 권리가있었습니다
- 디버그 매크로를 자르고 포스트하는 풍부한 아이러니 나는 완전히 이해하지 못했습니다.
다른 팁
두 Libs가 있는지 확인하고 싶을 수도 있습니다 #include
선언하는 헤더 파일 _dbg_char
그러나 그리워 extern
예어. 어쩌면 그게 그렇습니다 #ifdef
'다른 플랫폼을 위해 OS X에서만 해당 문제를 겪습니다.
제휴하지 않습니다 StackOverflow