Проблема со связыванием XCode / GCC: файл не имеет необходимой архитектуры - PullRequest
8 голосов
/ 28 января 2009

Я пытаюсь перенести проект windows, который включает в себя boost 1.37 и wxwidgets, на Mac. Он компилируется нормально, но компоновщик выдает мне сообщение об ошибке «файл не требуемой архитектуры для архитектуры ppc» для libz.1.dylib и то же сообщение, что и предупреждение некоторых других библиотек Я также получаю предупреждение «duplicate dylib» для libz.1.dylib.

Вывод компоновщика выглядит следующим образом:

Построение цели «Gemsweeper Mac» проекта «Gemsweeper Mac» с конфигурацией «Отладка»

Проверка зависимостей

Ld "/Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac" normal i386
    cd "/Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac"
    setenv MACOSX_DEPLOYMENT_TARGET 10.4
    /Developer/usr/bin/g++-4.0 -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk "-L/Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Debug" -L/Developer/SDKs/MacOSX10.4u.sdk/usr/local/lib -L/opt/local/lib "-F/Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Debug" -F/Users/adriangrigore/Library/Frameworks -F/Developer/SDKs/MacOSX10.4u.sdk/Library/Frameworks -filelist "/Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/Gemsweeper Mac.LinkFileList" -mmacosx-version-min=10.4 -L/opt/local/lib -L/Users/adriangrigore/wxwidgets-manual/wxMac-2.8.9/lib /opt/local/lib/libboost_system-mt.a /opt/local/lib/libboost_program_options-mt.a /opt/local/lib/libboost_thread-mt.a -arch ppc -arch i386 -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL /Users/adriangrigore/wxwidgets-manual/wxMac-2.8.9/lib/libwx_mac-2.8.a -framework WebKit -lwxexpat-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lz -lpthread -liconv -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac"
ld warning: in /Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/main.o, file is not of required architecture
ld warning: in /Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/variousfunctions-xcode.o, file is not of required architecture
ld warning: in /Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/ParticleLayers.o, file is not of required architecture
ld warning: in /Users/adriangrigore/Documents/Gemsweeper Mac/Gemsweeper MacOS/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/SDLMain.o, file is not of required architecture
ld warning: in /opt/local/lib/libboost_system-mt.a, file is not of required architecture
ld warning: in /opt/local/lib/libboost_program_options-mt.a, file is not of required architecture
ld warning: in /opt/local/lib/libboost_thread-mt.a, file is not of required architecture
ld warning: in /opt/local/lib/libz.dylib, file is not of required architecture
ld warning: in /opt/local/lib/libiconv.dylib, file is not of required architecture
ld: in /opt/local/lib/libz.1.dylib, file is not of required architecture for architecture ppc
collect2: ld returned 1 exit status
ld warning: duplicate dylib /opt/local/lib/libz.1.dylib
ld warning: duplicate dylib /opt/local/lib/libiconv.2.dylib

Я довольно новичок в платформе Mac, поэтому любая помощь будет принята с благодарностью!

Спасибо

Адриан

Ответы [ 4 ]

2 голосов
/ 28 января 2009

Из полученных вами сообщений большинство Gemsweeper Mac и libboost были скомпилированы с использованием только ppc в качестве архитектуры. Вы должны настроить Xcode для генерации универсальных двоичных файлов и, вероятно, перекомпилировать libboost через MacPorts. У последних MacPorts есть «универсальная» цель, которая может помочь, хотя, если вы не планируете запускать ее на ПК, вы просто перекомпилируете ее.

Похоже, вам нужно перекомпилировать zlib и libiconv.

2 голосов
/ 28 января 2009

Звучит так, будто вам нужно перезагружать или перестраивать boost для Mac. И что бы ты ни делал, тебе нужно это сделать. Проще говоря, вам просто нужно переустановить библиотеки.

С помощью boost вам не нужно снова загружать все заново, сами источники являются мультиплатформенными, это просто двоичные файлы (библиотеки и т.п.), которые меняются от платформы к платформе. Скорее всего, вы уже загрузили все исходники, поэтому вам просто нужно перестроить библиотеку из исходников. http://www.boost.org/doc/libs/1_37_0/more/getting_started/unix-variants.html дает вам некоторую информацию о повышении здания с помощью bjam. Я знаю, что в Windows есть предварительно скомпилированные двоичные файлы, но я ничего не вижу об этом на веб-сайте Boost для Mac.

0 голосов
/ 29 января 2013

вам нужно ориентироваться на нативную архитектуру, а не на две .. на «универсальную».

, что включает в себя установку xcode на «Собственная архитектура сборки», «Только сборка активной архитектуры» и «Действительные архитектуры» в зависимости от версии вашего кода но убери все возможные архитектурные варианты.

и это потому, что повышение по умолчанию ./b2 install получит только собственную архитектуру.

попробуйте переустановить boost с ./b2 install toolset=intel

возможное (и непроверенное) решение - наращивание наддува дважды.

intel ./b2 install --prefix=/usr/local/x64 toolset=intel

родной ./b2 install --prefix=/usr/local/ppc

0 голосов
/ 28 января 2009

Удаление и повторная установка zlib и libiconv (плюс дюжина других зависимых библиотек) с помощью sudo port xxx install + universal помог. Спасибо за быстрый ответ! : -)

...