2012-12-20 93 views
2

我想添加一個C庫到Xcode。我從在線的C類下載了該庫,並且壓縮文件包含兩個文件:cs50.ccs50.h添加一個頭文件到Xcode

我用下面的命令安裝這些文件:

gcc -c -ggdb -std=c99 cs50.c -o cs50.o 
ar rcs libcs50.a cs50.o 
rm -f cs50.o 
chmod 0644 cs50.h libcs50.a 
sudo mv cs50.h /usr/include 
sudo cp libcs50.a /usr/lib 

構建項目時,我收到以下錯誤信息:

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

這是我怎樣,我引用了頭文件我的程序:

#include </usr/include/cs50.h> 

如果我不包括路徑,我會得到一個找不到文件消息。

我的Xcode版本是:版本4.5.2(4G2008a),我正在運行OS X 10.7.5。

感謝您的任何建議。

更新:

Actual Error Message

Added -lcs50 to the build phase

+1

您是否已將'-lcs50'添加到鏈接器選項中?你爲'#include「cs50.h」'得到的確切錯誤信息是什麼? – melpomene

+0

我只是將這些文件添加到Xcode項目中,並讓它執行構建,除非它們需要一些奇怪的構建環境。將它們移動到您的項目目錄結構中,然後在Xcode中的相應文件夾中選擇RMB並選擇「添加現有文件」等。 –

+0

是的,我已經加了-lcs50。我上傳了我所做的和實際的錯誤信息的屏幕截圖。 – EdGonz

回答

2

作爲一般規則,你不應該安裝或修改任何東西/usr除非你有一個很好的理由這樣做。此目錄是爲操作系統保留的,並且您可能會很快遇到很多問題 - 例如,如果意外覆蓋了系統庫或頭文件,甚至在更新操作系統時安裝新的東西可能會導致問題。

如果您確實需要在系統範圍內安裝,請將其放入/usr/local

但是,由於您使用調試信息編譯了庫,因此我認爲您還想在項目中測試它並使用它。

要做到這一點,將源代碼作爲新的「C/C++庫」目標添加到項目中會更容易。然後Xcode將負責所有醜陋的細節,例如編譯,選擇正確的處理器架構(32或64位),您將在Xcode中獲得源代碼級調試支持,並且如果您想要安裝應用程序或創建包爲此,Xcode也會自動爲你捆綁依賴關係。

0

如果您嘗試使用gcc編譯cs50.h庫,我發現在大多數現代64位mac上不成功。 Xcode 4.x通常需要64位兼容的庫格式。 GCC尚未更新爲包含64位目標文件。 Clang/LLVM是gcc的新興替代品,Apple被Xcode用作其首選編譯器引擎。我還沒有親自嘗試過,但會探索Xcode爲Xcode生成兼容的庫。我正在edX上參加Harvardx cs50x課程,即使對於有經驗的程序員也是如此。 cs50.h庫很有趣,因爲它爲各種變量類型提供了相對健壯的I/O例程,例如,字符串,整數。對於C編程語言是浮動的,包括對緩衝區溢出攻擊的良好保護。 實際上,您正在構建一個要添加到Xcode的自定義動態庫,該Xcode也稱爲框架。如果你有蘋果開發者帳戶,請查看框架編程指南,它應該證明有用。

+1

「GCC尚未更新爲包含64位目標文件」對不起? – trojanfoe