2016-03-28 11 views
0

問題を確認していただきありがとうございます。そこtry.mと呼ばれるオブジェクトcファイルがある、と私は、コマンドでオブジェクトファイルtry.oにそれをcomplie:オブジェクトc(.m)ファイルをosxのオブジェクトファイル(.o)にコンパイル

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

try.hがtry.mがある

int print_word(void); 

です:

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

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

Additionlyは、main()関数が含まれているのmain.cファイル、あり、そしてそれが見えます:

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

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

私は、次のコマンドでmain.oするmain.cのコンパイル:

gcc -o main.o -c main.c 

その後、私はmain.oをリンクし、メインの実行可能ファイルを形成するためにtry.o:

gcc -o main main.o try.o 

をこれらのステップの後、次のエラーが起こった: enter image description here

エラーは以下のとおりです。

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) 

これらのエラーはどのように解決できますか?

答えて

1

Foundationフレームワークとリンクする必要があります。 1つのコマンドですべてを実行できます:gcc main.c try.m -framework Foundation

+0

ありがとう@EricS。私の質問に示されているように、main.oとtry.oを別々にコンパイルし、それらを組み合わせて実行可能ファイルを形成する方法はありますか? – Pony

+0

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

+0

それは働いた。ありがとう@EricS – Pony

関連する問題