2012-01-04 39 views
0

即時嘗試編譯sbutils。它帶有一個makefile,但每次嘗試編譯時都會出錯。這是生成文件:如何編譯sbopenurl(c)

BINS := sblaunch sburlschemes sbopenurl sbbundleids 
all: $(BINS) 
%: %.c ent.plist 
    igcc -o [email protected] $< -std=gnu99 -framework CoreFoundation -framework SpringBoardServices 
    ldid -Sent.plist [email protected] 
clean: 
    rm -f $(BINS) 

它帶有一些utils的(sblaunch sburlschemes sbopenurl和sbbundleids),但我只希望sbopenurl我嘗試complie直接期運用gcc sbopenurl但錯誤與

Undefined symbols: 
    "_CFURLCreateWithBytes", referenced from: 
     _main in ccMCI3Fd.o 
    "_SBSOpenSensitiveURLAndUnlock", referenced from: 
     _main in ccMCI3Fd.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
可以

人幫我?

回答

1

如果您查看鏈接程序找不到的符號的前綴,或者只查看原始的Makefile,則可以發現框架CoreFoundation和SpringBoardServices是必需的。進一步檢查源文件或Makefile文件將會發現代碼中使用了C99擴展,因此gcc需要-std = gnu99標誌。所以編譯使用:

gcc -std=gnu99 -framework CoreFoundation -framework SpringBoardServices -o sbopenurl sbopenurl.c 
+0

OK十分感謝但每次我運行的命令時,它無法找到的CoreFoundation時間它應該是在豬病sbopenurl.c是或USR/inculude IM期運用GCC在我的iPhone BTW :)謝謝 – 2012-01-04 09:01:49

+0

nope ... CoreFoundation是一個標準的Apple框架,位於 /System/Library/Frameworks/CoreFoundation.framework。如果GCC找不到它,請將開關-isysroot 添加到GCC的上述命令行中。將iOS開發系統替換爲;它可能會像/Developer/Platforms/iPhoneOS.platform/iPhoneOS5.0.sdk(我不知道確切的路徑,我沒有Mac OS X)。 – 2012-01-04 09:10:22

+0

順便說一句,它不能在/ usr/include中。上面的'編譯器錯誤'不是一個真正的編譯器錯誤,而是一個鏈接器錯誤。編譯器不能找到這些函數的聲明,但如果沒有它們包含的框架,它不能找到它們的實際實現。請參閱這個來理解編譯的工作原理:http://caml.inria .FR /酒吧/文檔/奧賴利書/ HTML /書ora065.html – 2012-01-04 09:12:01