2010-08-22 59 views
1

在此工作幾個小時,所以任何洞察力將不勝感激。當編譯一個靜態libssh2庫作爲i386時,它總是返回一個x86_64庫

我想在OS X上爲iPhone模擬器編譯libssh2(我已經爲它編譯成功了)。

我使用下面的環境變量和命令:

export DEVROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer 
export SDKROOT=$DEVROOT/SDKs/iPhoneSimulator3.0.sdk 
export CC=$DEVROOT/usr/bin/gcc-4.2 
export LD=$DEVROOT/usr/bin/ld 
export CPP=$DEVROOT/usr/bin/cpp-4.2 
export CXX=$DEVROOT/usr/bin/g++-4.2 
export AR=$DEVROOT/usr/bin/ar 
export AS=$DEVROOT/usr/bin/as 
export NM=$DEVROOT/usr/bin/nm 
export CXXCPP=$DEVROOT/usr/bin/cpp-4.2 
export RANLIB=$DEVROOT/usr/bin/ranlib 
export LDFLAGS="-arch i386 -pipe -no-cpp-precomp -isysroot $SDKROOT -L/Users/<USERNAME>/Desktop/Dev/iphonesimulator-os/lib" 
export CFLAGS="-arch i386 -pipe -no-cpp-precomp -isysroot $SDKROOT -I/Users/<USERNAME>/Desktop/Dev/iphonesimulator-os/include" 
export CXXFLAGS="-arch i386 -pipe -no-cpp-precomp -isysroot $SDKROOT -I/Users/<USERNAME>/Desktop/Dev/iphonesimulator-os/include/" 
export CFLAGS=-m32 
export CPPFLAGS=-m32 

cd /Users/<USERNAME>/Desktop/Dev/src/gnupg-1.4.10 
sudo ./configure --host=i386-apple-darwin --prefix=/Users/<USERNAME>/Desktop/Dev/iphonesimulator-os 
sudo make 
sudo make install 

cd /Users/<USERNAME>/Desktop/Dev/src/libgpg-error-1.7 
sudo ./configure --host=i386-apple-darwin --prefix=/Users/<USERNAME>/Desktop/Dev/iphonesimulator-os --enable-shared=no 
sudo make 
sudo make install 

cd /Users/<USERNAME>/Desktop/Dev/src/libgcrypt-1.4.5 
sudo ./configure --host=i386-apple-darwin --prefix=/Users/<USERNAME>/Desktop/Dev/iphonesimulator-os --enable-shared=no --with-gpg-error-prefix=/Users/<USERNAME>/Desktop/Dev/iphonesimulator-os --disable-asm 
sudo make 
sudo make install 

sudo ./configure --host=i386-apple-darwin --prefix=/Users/<USERNAME>/Desktop/Dev/iphonesimulator-os --with-libgcrypt-prefix=/Users/<USERNAME>/Desktop/Dev/src/libgcrypt-1.4.5 
cd /Users/<USERNAME>/Desktop/Dev/src/libssh2-1.2.7 
sudo make 
sudo make install 

所產生的節目和x86_64 dylib試圖用靜態庫某文件在iPhone應用程序時說libssh2.a ,文件是爲不支持的文件格式而構建的,而不是被鏈接的體系結構(i386)。

libgcrypt和其他所需的庫都編譯時沒有問題。

在此先感謝!

回答

2

我遇到了幾乎相同的問題。我正在編譯libssh2,但我正在使用openssl。要強制配置以32位模式編譯,您需要設置CFLAGS和CPPFLAGS。你運行configure之前在終端中輸入以下命令:

export CFLAGS=-m32 
export CPPFLAGS=-m32 

在終端運行./configure之前,你需要設置CFLAGS和CPPFLAGS。

出口CFLAGS = -m32

出口CPPFLAGS = -m32

要建立libssh2與OpenSSL的,我做到了第一,從他們各自的網站下載最新的openssllibssh2源文件的方式。轉到您下載並解壓縮到openssl的目錄。在我構建openssl二進制文件之後,我實際上做了上述命令,但似乎並不重要。但是在構建libssh2之前需要它們。

的./configure --prefix = /目標目錄

使

使安裝

是切換到你下載的文件夾,解壓後libssh2。配置和構建它用下面的命令:

的./configure --with-OpenSSL的--with-的libssl前綴=/OPENSSL_TARGET_DIRECTORY前綴=/LIBSSH2_TARGET_DIRECTORY

使

make install的

您可以在目標導演的「lib」文件夾中找到要導入到Xcode項目中的* .a文件。

正如我敢肯定你已經知道,這僅僅是爲iPhone模擬器。您需要構建arm架構以在設備上使用此庫。

+0

非常感謝您取得聯繫。我剛剛試過你的建議,但我沒有運氣。也許我做錯了什麼? 我修改了代碼以準確顯示我在做什麼。 – 2010-09-02 00:16:59

+0

看起來您在運行make之前沒有配置libssh2。 ./configure --prefix =/BUILD_DIRECTORY --with-libgcrypt-prefix =/Users/ /Desktop/Dev/src/libgcrypt-1.4.5 – Mike 2010-09-02 15:36:03

+0

感謝您的持續支持 - 儘管我仍然沒有任何運氣,我已經更新了上面的代碼。 – 2010-09-02 22:07:34

0

以下環境工作對我來說建立libssh2的libssl和爲iPhone模擬器。

export DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer 
export SDKROOT=$DEVROOT/SDKs/iPhoneOS4.2.sdk 
export CC=$DEVROOT/usr/bin/gcc 
export LD=$DEVROOT/usr/bin/ld 
export CPP=$DEVROOT/usr/bin/cpp 
export CXX=$DEVROOT/usr/bin/g++ 
export AR=$DEVROOT/usr/bin/ar 
export AS=$DEVROOT/usr/bin/as 
export NM=$DEVROOT/usr/bin/nm 
export CXXCPP=$DEVROOT/usr/bin/cpp 
export RANLIB=$DEVROOT/usr/bin/ranlib 
export LDFLAGS="-arch i386 -L/Users/user/project/third_party/lib" 
export CFLAGS="-arch i386 -I/Users/user/project/third_party/include" 
export CXXFLAGS="-arch i386 -I/Users/user/project/third_party" 
相關問題