2012-07-16 76 views
1

我試圖按照這裏的教程:未知Objective-C的錯誤「適用於建築x86_64的未定義符號」,似乎一切都OK

http://cocoadevcentral.com/articles/000081.php

而且一旦我到了「頭文件」部分,我一直在Mac OSX上的命令行運行gcc test1.c -o test1後得到一個奇怪的錯誤消息:

Undefined symbols for architecture x86_64: 
    "_sum", referenced from: 
     _main in ccdZyc82.o 
    "_average", referenced from: 
     _main in ccdZyc82.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

包括math_functions.h:

int sum(int x, int y); 
float average(float x, float y, float z); 

math_functions.c:

int sum(int x, int y) { 
    return x + y; 
} 

float average(float x, float y, float z) { 
    return (x + y + z)/3; 
} 

最後,我test1.c:

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

main() { 
    int thesum = sum(1, 2); 
    float ave = average(1.1, 2.21, 55.32); 

    printf("sum = %i\nave = %f\n(int)ave = %i\n", thesum, ave, (int)ave); 
} 

我似乎已正確執行了一切,我不明白的地方是錯誤的來源。幫幫我?

+0

http://stackoverflow.com/questions/1754460/apples-gcc-whats-the-difference-between-arch-i386-and- m32 希望這會有所幫助。 – AechoLiu 2012-07-16 09:14:48

回答

2

你有兩個單獨的源文件math_functions.c和test1.c,它們都需要編譯並鏈接在一起。錯誤消息告訴你編譯器找不到函數averagefloat,那是因爲它們來自math_functions.c,而你只編譯了test1.c。

您鏈接到這個例子告訴您鍵入:

gcc test3.c math_functions.c -o test3 
+0

我知道了!而我所要做的只是向下滾動一些。 – 2012-07-16 09:24:12

1

您不鏈接包含sum()average()函數的目標文件。

這樣做:

$ gcc -c -o math_functions.o math_functions.c 
$ gcc -c -o test1.o test1.c 
$ gcc -o test1 test1.o math_functions.o 

前兩行的源文件編譯成目標文件和最後一行的目標文件鏈接到可執行文件。

您需要投入一些時間學習make,因爲沒有開發人員可以打擾那麼多隻是爲了編譯(也知道它之前,你已經知道文件名錯誤,並編譯你的源文件!)。

相關問題