Intereting Posts

Ошибка компоновщика – попытка привязки к руке, но компоновщик с использованием x86

Я пытаюсь перекрестно скомпилировать эту библиотеку C как библиотеку iOS, то есть для машины armv7. Я использую машину OSX для компиляции библиотеки. Проект настроен на использование Autoconf – вот параметры, которые я использую:

./configure --host=arm-apple-darwin --prefix ~/dev/xmlrpc-c-1.25.28/iOS_bin_arm CFLAGS="-arch armv7s -isysroot /Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk -miphoneos-version-min=4.0" --disable-curl-client --disable-cplusplus LDFLAGS='-arch armv7s -miphoneos-version-min=4.0 --sysroot /Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk'

Это прекрасно компилируется. Проблема возникает на этапе связывания:

 ld: warning: ignoring file parse_datetime.osh, file was built for armv7s which is not the architecture being linked (x86_64): parse_datetime.osh ld: warning: ignoring file parse_value.osh, file was built for armv7s which is not the architecture being linked (x86_64): parse_value.osh ld: warning: ignoring file resource.osh, file was built for armv7s which is not the architecture being linked (x86_64): resource.osh ld: warning: ignoring file trace.osh, file was built for armv7s which is not the architecture being linked (x86_64): trace.osh ld: warning: ignoring file version.osh, file was built for armv7s which is not the architecture being linked (x86_64): version.osh ld: warning: ignoring file xmlrpc_data.osh, file was built for armv7s which is not the architecture being linked (x86_64): xmlrpc_data.osh ld: warning: ignoring file xmlrpc_datetime.osh, file was built for armv7s which is not the architecture being linked (x86_64): xmlrpc_datetime.osh ld: warning: ignoring file xmlrpc_string.osh, file was built for armv7s which is not the architecture being linked (x86_64): xmlrpc_string.osh 

и так далее. Созданные файлы dylib построены для x86 вместо armv7, которая представляет собой архитектуру, к которой будет привязано мое приложение iOS – Xcode выдает эти ошибки при попытке построить проект:

  ld: warning: ld: warning: ld: warning: ignoring file ~/dev/xmlrpc-c-1.25.28/iOS_bin_arm/lib/libxmlrpc_server_pstream++.7.25.dylib, file was built for x86_64 which is not the architecture being linked (armv7): ~/dev/xmlrpc-c-1.25.28/iOS_bin_arm/lib/libxmlrpc_server_pstream++.7.25.dylib ignoring file ~/dev/xmlrpc-c-1.25.28/iOS_bin_arm/lib/libxmlrpc_server_cgi++.dylib, file was built for x86_64 which is not the architecture being linked (armv7):~/dev/xmlrpc-c-1.25.28/iOS_bin_arm/lib/libxmlrpc_server_cgi++.dylib 

и т. д. для каждого исполняемого файла, сгенерированного ранее, с использованием ./configure и make .

Очевидно, что когда я тестирую свой код на симуляторе, все хорошо, поскольку проблем с перекрестной компиляцией нет.

Я даже попытался напрямую указать LDFLAGS в команде make, но он все еще пытается связать с x86. Есть ли способ сообщить компилятору связать с указанной архитектурой? Я проверил man-страницу для ld , но я не мог найти ничего, что могло бы помочь. Есть идеи?

Autoconf – это, по сути, мой худший кошмар, поэтому это решение может быть не «правильным», но, можно надеяться, разблокировать вас – похоже, что в конфигурации сборки не учитываются LDFLAGS при связывании с OS X. Он использует LDFLAGS_SHLIB, но мне не удалось чтобы заставить его переопределить это из аргумента командной строки. Попробуйте этот патч (обратите внимание, что я загрузил v1.25.29) – все, что я сделал, это добавить ваши аргументы в конец существующей ссылки для общих библиотек.

 neals-mbp: ~/xmlrpc-c-1.25.29> diff config.mk.in config.mk.in2 297c297 < LDFLAGS_SHLIB = -dynamiclib -undefined suppress -single_module \ --- > LDFLAGS_SHLIB = -dynamiclib -undefined suppress -single_module -arch armv7s -miphoneos-version- min=4.0 --sysroot /Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk \