При компиляции статической библиотеки libssh2 как i386 она всегда возвращает библиотеку x86_64 - PullRequest
1 голос
/ 22 августа 2010

Я работаю над этим уже несколько часов, так что любая оценка будет принята с благодарностью.

Я пытаюсь скомпилировать libssh2 для iPhone Simulator на OS X (я уже успешно скомпилировал его для устройства).

Я использую следующие переменные и команды окружения:

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, и при попытке использовать статическую библиотеку .a файл в приложении iPhoneговорит, что libssh2.a, файл был создан для неподдерживаемого формата файлов, который не является связываемой архитектурой (i386).

libgcrypt и все остальные необходимые библиотеки скомпилированы без проблем.

Спасибо зазаранее!

Ответы [ 2 ]

2 голосов
/ 01 сентября 2010

Я столкнулся почти с этой же проблемой.Я компилировал libssh2, но я использовал openssl с ним.Чтобы принудительно сконфигурировать компиляцию в 32-битном режиме, вам нужно установить CFLAGS и CPPFLAGS.Введите эти команды в терминале перед запуском configure:

export CFLAGS=-m32
export CPPFLAGS=-m32

Перед запуском ./configure в терминале необходимо установить CFLAGS и CPPFLAGS.

export CFLAGS = -m32

export CPPFLAGS = -m32

Чтобы собрать libssh2 с openssl, как я это делал сначала, загрузите последние исходные файлы openssl и libssh2 из их соответствующихместа.Перейдите в каталог, который вы скачали и распаковали в openssl.Я фактически выполнил вышеупомянутые команды после того, как собрал бинарные файлы openssl, и это, похоже, не имело значения.Они требовались до сборки libssh2.

. / Configure --prefix = / TARGET_DIRECTORY

make

make install

После этого переключитесь напапка, в которую вы скачали и распаковали libssh2.Сконфигурируйте и соберите его с помощью следующих команд:

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

make

make install

Вы можете найти файлы * .a для импорта в проект Xcode в папках "lib" целевых каталогов.

Как я уверен, вы уже знаете, этотолько для симулятора iPhone.Вам нужно будет собрать архитектуру arm для использования этой библиотеки на устройстве.

0 голосов
/ 02 февраля 2011

Следующее окружение помогло мне собрать libssh2 и libssl для iPhone Simulator.

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"
...