2010-04-08 5 views
8

나는 간단한 문제가있을 수 있지만 컴파일하는 동안 유익한 오류나 경고가 없으므로 잘못된 점을 알려줍니다.Symbol Not Flat Namespace ObjC++

C++ 주 및 ObjC 헤더 파일이 포함 된 Objective-C++ 응용 프로그램이 있습니다.

이 잘 구축하지만, 실행하면이 오류 메시지가 있습니다 :

Dyld Error Message: 
    Symbol not found: _OBJC_CLASS_$_AppController 
    Referenced from: /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix 
    Expected in: flat namespace 
in /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix 

인터넷 검색을 아무리 해결책 결과 없다, 그리고 난 그냥 편집을 놓친 나 옵션을 구축했는지 확인 해요 어딘가에.

"AppController.h"는 대상 (확인 됨)에 포함되어 있고 #import '은 ObjC 클래스 파일에 포함되어 있습니다.

도움을 주시면 대단히 감사하겠습니다.

ObjC++은 지속적으로 두통을줍니다.

감사합니다.

-S!

답변

5

분명히 AppController 클래스가 없습니다. AppController 클래스는 동적 라이브러리의 프레임 워크에 정의되어 있습니까? 그렇다면 앱을 실행할 때 라이브러리/프레임 워크를 찾을 위치를 알고 있습니까?

이것은 링커 문제입니다. 헤더 파일은 부적절합니다. 보아야 할 .m 또는 .mm 파일입니다.

+1

예. 사실, .m 파일에서 AppController.h가 포함 된 네임 스페이스 문제로 인해 이진 파일에 포함되지 않았습니다. GCC는 아무런 오류도 던지지 않았으므로 무엇이 잘못되었는지 전혀 몰랐습니다. 감사합니다. –

1

이것이 문제가되는지는 확실하지 않지만 디버깅을 위해 하루 종일 걸린 C++ dll과 비슷한 문제가있었습니다. 저는 C++에서 약 15 년 동안 프로그래밍하지 않았으며, 순수 가상 함수를 작성하려고 시도하면서 친숙한 구문 인 "virtual void f();"를 사용했습니다. - 죄송합니다. C++에서 "virtual void f() == 0;"이어야합니다. Mac OSX 10.9.2의 gcc 최신 버전은 코드를 행복하게 컴파일합니다.

나는 그것이 완벽하게 합법적 인 선언이라고 생각한다. 그러나 C++에서 여러 파일로 확장 할 수 있는지 확실하지 않으므로 (CXX 파일에서 구현이 제공되지 않았기 때문에) 플래그가 있어야하는 것처럼 보인다. 모든 이벤트, 기호는 객체 코드로 만들고 링커는 절대로 불평하지 않기 때문에 누락 된 참조로 끝납니다. 희망이 사람을 도움이됩니다.

+0

이것은 분명히 나를 도왔다. 힌트를 가져 주셔서 감사합니다. 내 추상 클래스의 메서드 중 하나에'= 0'을 추가하는 것을 잊었습니다. –