默認情況下。是有生成,可能你不知道在哪里。
Xcode-->perferences--> locations
Derived Data,下面有一個路徑:
/Users/Liam/Library/Developer/Xcode/DerivedData
這個就是默認的生成路徑。點擊旁邊的箭頭就可跳轉到該文件夾。這里不值程序的目標文件,還有其他的生成的文件。
如果你想在項目中也生成一份,那么就點擊Advanced按鈕。將Build Location,選擇“locations specified by targets”就可以了。
這時你在Build,那么項目路徑下就會產生Build目錄。
targets -> build phases -> link binary with Libraries
Build Settings里面設定Library Search Paths為那個靜態庫的存儲路徑,不然不會讀取。
object-c調用C++編寫的靜態庫時,首先要在build setting中C++ Standard Library 選項中選擇libstdc++,其次就是調用C++接口的.m文件要改為.mm(就是 修改文件名后綴為.mm)。
很多情況下,我們從網上得到的是一個純C的代碼包,他們這些庫,往往是各種平台通用,代碼包svn checkout出來后,里面有makefile , vcproject file,等等。
往往我們先README看過之后,通過./configure make make install ,
來實現編譯生成了一個庫。(注意一些基本語法 ./confiure后如果帶 --prefix=/path/to/your/custom/dir 表明自定義安裝路徑 ,這個很有用,有些人默認安裝后,找不到*.a庫的路徑,急死了。嘿嘿。)
那么在這樣的情況下,我們第一個首先會遇到的問題,就是這個庫格式不兼容。
我們添加了這個庫到project后編譯時,顯示this file format doesn't support (i386)。
這個情況,是由於大部分snow leopard是INTEL DUO CPU,雙核x86_64的,一般很多庫,不加特別標注,都以為你開發了為MAC電腦開發程序,所以庫都默認為x86_64位的靜態庫。如果你好奇,可以new一個MAC開發程序的project,試着看看那個庫能不能正常編譯,沒有warning就知道了。
當然,還有一個命令行來檢測你編譯的庫,可以使用在什么平台架構下。
方法如下: : lipo -info /path/to/your/library.a
即可看到此庫位i386, x86_64, arm等等。
明白了上面的問題的產生原因,我們就好辦了。 一般解決辦法是這樣的,在./configure 之后加一點參數,比如 CFLAG="-arch i386" 。GCC的path設定到SDK path以下的/usr/lib/gcc/i686 or arm下。注意,SDK PATH,有兩種,iphoneOs 和iphoneSimulator.有很大的區別!!
好了。以上是第一個問題。隨后,你編譯成功,lipo檢測版本也OK后,你可以*.a 靜態庫文件到Project了。記得選中復制到項目。
再一個問題,也就是第二大問題,就是如何導入頭文件。
由於很多是C的代碼,headers通常是這樣使用的 #include <fuck.h> 。如果我們這樣使用,xcode直接報錯,提示找不到這樣的頭文件。
那我們該怎么辦呢?我找了網上所有的文章,都一帶而過。於是我很愚蠢的選擇把頭文件拷貝過來。然后一個個的改include 為import ,把< >語法,改為” “。並且,木有一個高手願意說!我恨啊!!!
其實可以使用這樣的辦法,就是在右擊你的project 名,選擇Get Info . 在build選項卡中,有search hearder path 選項。是讓你告訴xcode去哪兒搜搜頭文件。
記住,這里如果你的庫的安裝路徑是/usr/AAA的話,那AAA下肯定有include , lib兩大文件夾。 那你在選項中,請直接填/usr/AAA,不需要多此一舉選擇到include文件夾中,蘋果會自動替你搜索進去。
這里有一個小細節,如果這樣編譯出錯的話,請不要選中recursive ,否則可能導致頭文件重復引用,導致error: expected '=', ',', ';', 'asm' or '__attribute__' before 這樣的錯誤。
至此,xcode的引用第三方庫已經基本講解結束了。一般來說,請不要相信那些片段,說什么讓你設定library的path 。請記住,*.a的靜態庫,直接按照本文附件中的方法,添加文件到Project,不要偷懶直接引用path,會有很多意外的錯誤。
往往我們先README看過之后,通過./configure make make install ,
來實現編譯生成了一個庫。(注意一些基本語法 ./confiure后如果帶 --prefix=/path/to/your/custom/dir 表明自定義安裝路徑 ,這個很有用,有些人默認安裝后,找不到*.a庫的路徑,急死了。嘿嘿。)
那么在這樣的情況下,我們第一個首先會遇到的問題,就是這個庫格式不兼容。
我們添加了這個庫到project后編譯時,顯示this file format doesn't support (i386)。
這個情況,是由於大部分snow leopard是INTEL DUO CPU,雙核x86_64的,一般很多庫,不加特別標注,都以為你開發了為MAC電腦開發程序,所以庫都默認為x86_64位的靜態庫。如果你好奇,可以new一個MAC開發程序的project,試着看看那個庫能不能正常編譯,沒有warning就知道了。
當然,還有一個命令行來檢測你編譯的庫,可以使用在什么平台架構下。
方法如下: : lipo -info /path/to/your/library.a
即可看到此庫位i386, x86_64, arm等等。
明白了上面的問題的產生原因,我們就好辦了。 一般解決辦法是這樣的,在./configure 之后加一點參數,比如 CFLAG="-arch i386" 。GCC的path設定到SDK path以下的/usr/lib/gcc/i686 or arm下。注意,SDK PATH,有兩種,iphoneOs 和iphoneSimulator.有很大的區別!!
好了。以上是第一個問題。隨后,你編譯成功,lipo檢測版本也OK后,你可以*.a 靜態庫文件到Project了。記得選中復制到項目。
再一個問題,也就是第二大問題,就是如何導入頭文件。
由於很多是C的代碼,headers通常是這樣使用的 #include <fuck.h> 。如果我們這樣使用,xcode直接報錯,提示找不到這樣的頭文件。
那我們該怎么辦呢?我找了網上所有的文章,都一帶而過。於是我很愚蠢的選擇把頭文件拷貝過來。然后一個個的改include 為import ,把< >語法,改為” “。並且,木有一個高手願意說!我恨啊!!!
其實可以使用這樣的辦法,就是在右擊你的project 名,選擇Get Info . 在build選項卡中,有search hearder path 選項。是讓你告訴xcode去哪兒搜搜頭文件。
記住,這里如果你的庫的安裝路徑是/usr/AAA的話,那AAA下肯定有include , lib兩大文件夾。 那你在選項中,請直接填/usr/AAA,不需要多此一舉選擇到include文件夾中,蘋果會自動替你搜索進去。
這里有一個小細節,如果這樣編譯出錯的話,請不要選中recursive ,否則可能導致頭文件重復引用,導致error: expected '=', ',', ';', 'asm' or '__attribute__' before 這樣的錯誤。
至此,xcode的引用第三方庫已經基本講解結束了。一般來說,請不要相信那些片段,說什么讓你設定library的path 。請記住,*.a的靜態庫,直接按照本文附件中的方法,添加文件到Project,不要偷懶直接引用path,會有很多意外的錯誤。