2016-03-28 13 views
0

Sorunu incelediğiniz için teşekkür ederiz. Orada try.m adında bir nesne c dosyasıdır ve ben komutuyla bir nesne dosyası try.o bunu complie:Nesne c (.m) dosyasının bir nesne dosyasına (.o) derlenmesi osx içinde

gcc -c try.m -o try.o -framework Foundation 

try.h try.m olan

int print_word(void); 

olduğunu :

#include "try.h" 
#import <Foundation/Foundation.h> 

int print_word(void) 
{ 
    NSLog (@"say hello"); 
    return 0; 
} 

Additionly, main() fonksiyonunu içerirler bir main.c dosyası vardır ve o görünür:

#include <stdio.h> 
#include "try.h" 

int main() 
{ 
    printf("This is main\n"); 
} 

aşağıdaki komutla main.o için main.c derlemek:

gcc -o main main.o try.o 

: Sonra

gcc -o main.o -c main.c 

, ben main.o ve try.o ana çalıştırılabilir dosya oluşturmak için bağlantı bu adımlardan sonra, aşağıdaki hatalar oldu: enter image description here

hataları şunlardır:

Undefined symbols for architecture x86_64: 
"_NSLog", referenced from: 
    _print_word in try.o 
ld: symbol(s) not found for architecture x86_64  
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Bu hatalar nasıl çözülebilir?

cevap

1

Vakıf çerçevesine karşı bağlantı kurmanız gerekir. Hepsini tek bir komutta yapabilirsiniz: gcc main.c try.m -framework Foundation.

+0

Teşekkürler @EricS. Main.o'yu derlemek ve ayrı ayrı try.o'yu deneymek için bir yöntem var mı, ve sonra da sorularımda gösterildiği gibi bir yürütülebilir dosya oluşturmak için bunları birleştirin mi? – Pony

+0

gcc -o try.o -c try.m; gcc -o main.o -c main.c; gcc main.o try.o -framework Foundation – EricS

+0

Çalıştı. Teşekkürler @EricS – Pony