2011-04-29 80 views
2

我一直在試圖獲得爲iPhone項目構建的C庫。該庫提供給我一個Makefile。當我通過簡單地運行make並將靜態庫添加到我的項目來構建庫時,鏈接器會抱怨這個庫是爲x86_64體系結構構建的,並且不能鏈接到i386。我該如何構建這個靜態C庫來與iPhone一起工作

所以..我編輯了make文件來爲i386構建庫。該項目現在編譯和沒有問題的聯繫,但在應用程序終止原因爲:

Detected an attempt to call a symbol in system libraries that is not present on the iPhone: fcntl$UNIX2003 called from function irc_connect in image KadeChat. If you are encountering this problem running a simulator binary within gdb, make sure you 'set start-with-shell off' first.

我做了谷歌搜索關於這個的很多,似乎這可能與我的版本的SDK中的錯誤(但林不當然)。

所以..我想在設備上運行這個應用程序,因爲顯然這個模擬器不起作用。與此問題是,我無法爲目標體系結構獲取此庫構建。

file was built for unsupported file format which is not the architecture being linked (armv7)

我再次編輯了make文件,嘗試構建設備目標體系結構的庫。

我做Makefile中的以下修改:

CC = /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang CFLAGS = -Wall -DIN_BUILDING_LIBIRC -O3 -DENABLE_THREADS -D_REENTRANT -arch armv7

這將導致以下錯誤:

/usr/include/machine/_types.h:36:10:致命錯誤:' arm/_types.h'文件未找到#include「arm/_types.h」

正如你所看到的,我沒有運氣讓這個庫爲我工作。由於我是iPhone新手,我以爲我會問。處理移植C庫以使用iPhone的最佳方式是什麼?我應該嘗試直接在我的項目中構建源代碼?我嘗試過這個,但是導致了很多錯誤。任何意見將是有益的。

謝謝!

回答

1

與其試圖讓設置正確地使用Makefile手動交叉編譯東西,或許最簡單的做法是將庫的源直接包含到項目中,如您所說。

如果這導致「很多錯誤」,也許你錯過了一些.h文件,或者Makefile設置了一些你在XCode中沒有提供的「-D」編譯器標誌。

+0

感謝回覆,但即使使用'Other Linker Flags'將make文件中指定的所有標誌添加到xcode後,我也有30個編譯器錯誤。它們在'*'之前是'expected')的錯誤 – Nick 2011-04-29 03:34:23

+1

'其他鏈接器標記'不適用於編譯時錯誤;編譯器標記將不得不在OTHER_CFLAGS中傳遞如果打開「構建結果」窗口XCode中,您可以看到XCode用於運行編譯器的確切命令;將其與您的Makefile所做的相比較。 – 2011-04-29 04:33:33