2013-02-17 3 views
5

그래서, 나는 우분투를 얻고 clang3.0 설치하고 간단한 program.m :그 소리

#include <Foundation/Foundation.h> 
int main() 
{ 
     @autoreleasepool{ 
      NSLog(@"Hi"); 
     } 

     return 0; 
} 

내가 같이 컴파일하려고 :

clang first.m -I /usr/include/GNUstep/ -lgnustep-base -fconstant-string-class=NSConstantString -objc 

나는

undefined reference to objc_autoreleasePoolPush 
undefined reference to objc_autoreleasePoolPop 

을 얻을 그래서 나는 조금 인터넷 검색 및 objc2 설치하고 시도했다 :

clang first.m -I /usr/include/GNUstep/ -lgnustep-base -fconstant-string-class=NSConstantString -objc2 

아무 것도 변경되지 않습니다. 어쩌면 누군가가 똑같은 문제를 해결 했을까?

답변

0

, 당신의 first.m 파일의 복사본이 줄을 나를 위해 컴파일 :

clang first.m `gnustep-config --objc-flags` `gnustep-config --objc-libs` \ 
-I /usr/include/GNUstep/ -lgnustep-base 

하지만 어쩌면 그것은 단순히 오타는 명령 줄의 끝에?

첫 번째 예제의 끝에 -objc를 사용하고 두 번째 예제의 끝에 -objc2를 사용하면 clang 컴파일러가 각각 bjc 및 bjc2라는 이름의 실행 파일을 만들도록 지시합니다. -lobj? Objective-C 런타임 라이브러리를 얻으려면 obj 라이브러리에서 링크하는 것이 중요하다고 생각합니다. libobjc2 프로젝트로도 생성 된 라이브러리의 이름은 여전히 ​​libobjc.so.x.y입니다. 귀하의 명령에 -lobjc가 포함되어 있지 않다면 어떻게 올바르게 링크 될 수 있는지 보지 못합니다. 나는 틀릴 수도 있지만 그것이 없으면 나를 위해 일하지 않습니다.

+0

감사합니다 WeakPointer) clang first.m'gnustep-config --objc-flags''gnustep-config --objc-libs' -I/usr/include/GNUstep/-lgnustep-base -I/home/nazar/libobjc2/ 이 잘 작동하지만 경고를 얻을 : 사용되지 않는 인수를 컴파일시 :는/usr/lib 디렉토리/libgnustep 필요한 libobjc.so.3, '-shared-관하여 libgcc' 덕분에 다시) – Nils

+0

지금은 경고 수를 -base.so는 libobjc.so.4와 충돌 할 수 있습니다. – Nils

0

이것이 GNUstep에 적용되는지 확실하지 않지만 OS X에서는 ARC로 컴파일하려는 경우 -fobjc-arc 컴파일러 플래그를 추가해야합니다.

+0

오류 : 깨지기 쉬운 abi로 -fobjc-arc가 지원되지 않음 – Nils

+1

http://wiki.gnustep.org/index.php/ObjC2_FAQ에 따르면'-fobjc-nonfragile-abi' 옵션을 추가해야합니다. –

+0

http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux를 시도해 보겠습니다. – Nils

0

GNUmakefile로 빌드를 시도 하시겠습니까?

다음은 글을 쓰는 방법입니다.

http://www.gnustep.it/nicola/Tutorials/WritingMakefiles/node2.html

하나는 컴파일

연타 first.m -c -MP -MMD -DGNUSTEP -DGNUSTEP_BASE_LIBRARY = 1 -DGNU_GUI_LIBRARY -DGNU_RUNTIME = 1 = 1 = 1 -DGNUSTEP_BASE_LIBRARY -fobjc처럼 연결될 수 -runtime = gnustep-1.7 -fno-strict-aliasing -fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -fobjc-nonfragile-abi -D_NONFRAGILE_ABI -pthread -fPIC -DDEBUG -fno-생략 프레임 포인터 -Wall -DGSWARN -DGSDIAGNOSE -Wno -import -g -fgnu-runtime -fconstant-string-class = NSConstantString -I입니다. -I/usr/local/include -o obj/first.obj/first.mo

clang -rdynamic -pthread -shared-libgcc -fexceptions -fobjc-nonfragile-abi -fgnu-runtime -o obj/first. /obj/first.obj/first.mo -L/usr/local/lib -lgnustep-base -lobjc -lm

GNUstep make 패키지를 구성하는 방법에 따라 다릅니다. 내 우분투 시스템에 설치 libobjc2와

+0

응? makefile은 OP의 링커 문제와 관련이 있습니까? – trojanfoe

+0

그것은 단지 makefile이 아니며, 구성된 옵션을 포함하는 makefile입니다.GNUstep make 패키지는 일반적으로 링커 옵션을 포함하여 GNUstep 라이브러리를 빌드하는 데 사용 된 옵션을 제공합니다. –