2010-08-22 35 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" 
相关问题