1

现在已经为此工作了几个小时,因此任何见解都将不胜感激。

我正在尝试为 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

生成的 dylib 显示为 x86_64,当尝试在 iPhone 应用程序中使用静态库 .a 文件时显示为 libssh2.a,该文件是为不受支持的文件格式构建的,该文件格式不是所链接的体系结构 (i386)。

libgcrypt 和其他必需的库都已编译,没有问题。

提前致谢!

4

2 回答 2

2

我遇到了几乎同样的问题。我正在编译 libssh2,但我使用的是 openssl。要强制配置以在 32 位模式下编译,您需要设置 CFLAGS 和 CPPFLAGS。在运行配置之前,在终端中输入这些命令:

export CFLAGS=-m32
export CPPFLAGS=-m32

在终端中运行 ./configure 之前,您需要设置 CFLAGS 和 CPPFLAGS。

导出 CFLAGS=-m32

导出 CPPFLAGS=-m32

要按照我的方式使用 openssl 构建 libssh2,首先从各自的站点下载最新的openssllibssh2源文件。转到您下载并解压缩 openssl 的目录。在构建 openssl 二进制文件后,我实际上执行了上述命令,但这似乎并不重要。在构建 libssh2 之前需要它们。

./configure --prefix=/TARGET_DIRECTORY

制作

进行安装

之后切换到您下载并解压缩 libssh2 的文件夹。使用以下命令配置和构建它:

./configure --with-openssl --with-libssl-prefix=/OPENSSL_TARGET_DIRECTORY --prefix=/LIBSSH2_TARGET_DIRECTORY

制作

进行安装

您可以在目标目录的“lib”文件夹中找到要导入 Xcode 项目的 *.a 文件。

我相信您已经知道,这仅适用于 iPhone 模拟器。您需要为 arm 架构构建才能在设备上使用此库。

于 2010-09-01T15:02:48.847 回答
0

以下环境为我构建了 iPhone Simulator 的 libssh2 和 libssl。

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"
于 2011-02-02T17:20:06.283 回答