2010-06-02 38 views
0

我實際上正在爲iPhone開發一個應用程序,我需要使用一個庫,最初專用於Linux環境。由於我使用Mac(與雪豹和英特爾酷睿),我想這是可以在我的應用程序中使用這個庫。我的庫有3個文件:一個文件.h,一個文件.a和一個文件.so(.a和.so都在/ Developer/usr/lib中)。另外我已經包含了.h我的nmy代碼,並且我在XCode中添加了一個.a框架(並且它的工作原理是因爲XCode找到.so編譯)。在Xcode中使用庫的問題

您的信息,當我使用命令「文件」爲的.so文件,我有: ELF 32位LSB的共享對象,英特爾80386,版本1(SYSV),動態鏈接的,不剝離

當我編譯Xcode模擬器時,我有一個警告和一個錯誤。
的警告是:

在/Developer/usr/lib/mylib.so,文件是專爲不支持 文件格式是不是架構被鏈接(I386)

錯誤是: 「_mylib_fct」,從引用:


- [MyAppAppDelegate applicationDidBecomeActive:]在 MyAppAppDelegate.o
符號(一個或多個)未發現
Collect2:LD返回1 退出狀態

當我編譯爲設備3.0架構ARM6,我也有相同的錯誤,但警告是完全不同的:
LN /Users/Pablo/MyApp/mylib.a文件不是必需的體系結構

我嘗試解決這個,使應用程序,因爲天這個LIB的工作,和我不不明白編譯器爲什麼抱怨...是32/64位的問題嗎?我該如何處理?

回答

1

AFAIK如果Mac OS與特定Linux版本不是二進制兼容的,則該庫不應該在您的項目中可用。

此外,您還需要兩個版本,一個用於模擬器(i386)和一個用於設備(​​arm ..)。

2

Mac OS X是而不是與Linux兼容的二進制文件。它不能加載ELF圖像,也不能共享相同的ABI。 它只能載MACH的圖像,例如:

file /usr/lib/libcrypto.dylib 
[..] 
/usr/lib/libcrypto.dylib (for architecture i386): Mach-O dynamically linked shared library i386 

閱讀的dlopen手冊頁瞭解詳情。

+0

謝謝,因此我不得不要求庫的作者使用MACH圖像重新創建它? 有沒有解決方法,因爲該作者不支持Mac OSX? – Pablo 2010-06-02 10:45:09

+0

如果庫作者正在提供源代碼,則可以嘗試在Mac OS X上編譯它。 – diciu 2010-06-03 03:32:20