Кросс-компилировать libgcrypt для iPhone? Ошибка компоновщика ... не может найти "fwrite" и "strerror"?

Я успешнокросс-скомпилированный Apache Portable Runtime (APR) для iPhone, используя наборнастроить скрипты это вызывает GNU Autotools "./configure" с необходимыми параметрами кросс-компиляции.

Сейчас я пытаюсь кросс-компилировать GNUTLS, который зависит от libtasn1 и libgcrypt, который, в свою очередь, зависит от libgpg-error. Здесь я сталкиваюсь с неприятностями и могу использовать вашу помощь ...

В настоящее время я пытаюсь кросс-компиляции libgpg-error. Сценарии конфигурации, которые я использовал ранее, работают прекрасно; процесс "./configure" завершается чисто. Проблемы возникают, когда я запускаю «make». Когда я запускаю make, кажется, что все компилируется, но в конце я получаю следующую неприятную ошибку компоновщика:

/bin/sh ../libtool --tag=CC   --mode=link /Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2  -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include  -arch armv6 --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o  ./libgpg-error.la  
/Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include -arch armv6 --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o  -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib ./.libs/libgpg-error.a
Undefined symbols:
  "_fwrite$UNIX2003", referenced from:
      _main in gpg_error-gpg-error.o
  "_strerror$UNIX2003", referenced from:
      _gpg_strerror in libgpg-error.a(libgpg_error_la-strerror.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[3]: *** [gpg-error] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

Любые идеи о том, как заставить это работать? Версии программного обеспечения, которые я собираю:

libgpg-error: 1,7libgcrypt: 1.4.4libtasn1: 2.2Гнатлы: 2.8.4

Пожалуйста помоги. Спасибо.

Обновить

Согласно первому отзыву, каждый SDK имеет копию «libSystem.dylib» в «$ SDKROOT / usr / lib». В каталоге $ DEVROOT / usr / lib нет копии libSystem, где:

$ DEVROOT = "/Developer/Platforms/iPhoneOS.platform/Developer"$ SDKROOT = "$ DEVROOT / SDKs / iPhoneOS $ VER.sdk"

Библиотеки "libSystem" содержат обычные, неокрашенные версии каждого символа, но не содержат варианты символов "$ UNIX2003". Я подозреваю, что GPG-ERROR определяет "_POSIX_C_SOURCE", "_UNIX" или другой макрос тестирования возможностей UNIX, и что в функции добавляется неконтролируемый заголовок, который добавляет "$ UNIX2003" к функциям, когда присутствуют эти макросы тестирования функций. Удаление «DEVROOT / usr / include» из списка включаемых каталогов не влияет на удаление этого сообщения об ошибке.

В качестве последнего средства я вижу, что «ld» принимает опцию «-alias_list», которая позволяет указать файл с записями, такими как «_fwrite _fwrite $ UNIX2003», чтобы принудительно разрешить эти неопределенные символы в их неокрашенные варианты. Если возможно, я бы хотел избежать этого варианта, так как он кажется хакерским и потенциально опасным.

Ответы на вопрос(3)

Ваш ответ на вопрос