2015-11-07 177 views
0

我在程序中使用了crc。在ViewController.mmViewDidLoad方法代碼如下:xcode c代碼編譯錯誤

char *testChars = "test chars"; 
crc32(0, (unsigned char*)testChars, strlen(testChars)); 

crc32功能代碼如下:

uint32_t crc32 (uint32_t crc, unsigned char *buf, size_t len) 
{ 
unsigned char *end; 
crc = ~crc; 
for (end = buf + len; buf < end; ++buf) 
    crc = crc32_table[(crc^*buf) & 0xff]^(crc >> 8); 
return ~crc; 

}

編譯錯誤是:

Undefined symbols for architecture x86_64,"crc32(unsigned int, unsigned char*, unsigned long)", referenced from:-[ViewController viewDidLoad:] in ViewController.o

我將ViewController.mm更改爲ViewController.m後,編譯成功。爲什麼?

+2

您的標題不匹配的標籤。 C還是C++? – user2079303

回答

1

您定義的crc可能在C文件中,而不是C++文件中,因此名稱未被修改爲類型特定的版本。

您在.mm文件中的用法與C++類似,因此將會名稱錯位。

通過將包含文件更改爲.m,您可以針對C編譯它,因此問題消失。

或者,你可以改變CRC文件有一個C++的擴展(C++或CC)

+0

非常感謝 – alpine