Я пытаюсь получить кросс-компилятор для моего Intel MacBook Pro с MacOS Mojave для компиляции для PowerPC G5 Mac. Я попытался выполнить измененную версию шагов из здесь , но моя команда конфигурирования завершается неудачно с этим сообщением об ошибке:
Assertion failed: (*offset_ptr == end_prologue_offset), function ParsePrologue, file /SourceCache/dwarf_utilities/dwarf_utilities-121.1/source/DWARFDebugLine.cpp, line 619.
collect2: fatal error: dsymutil terminated with signal 6 [Abort trap: 6]
compilation terminated.
*** The command 'gcc-8 -o conftest -g -O2 conftest.c' failed.
*** You must set the environment variable CC to a working compiler.
Моя команда настройки была:
CC=gcc-8 CXX=g++-8 ../gcc-8.3.0/configure \
--prefix=/opt/gcc/ppc/8 --disable-nls --disable-multilib --enable-languages=c,c++,objc,obj-c++,lto --with-dwarf2 \
--target=powerpc64-apple-darwin10.8.0 --with-sysroot=/Developer/SDKs/MacOSX10.5.sdk \
CFLAGS_FOR_TARGET="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 -g -O2" \
LDFLAGS_FOR_TARGET="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" \
CXXFLAGS_FOR_TARGET="-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 -g -O2"
Мой журнал конфигурации (доступен здесь ) сообщает об этом после сообщения об ошибке:
configure:5025: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| /* end confdefs.h. */
|
| #if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
| #error -static-libstdc++ not implemented
| #endif
| int main() {}
Я использую исходный код GCC 8.3.0 и загруженные сценарием mpfr (3.1.4), gmp (6.1.0), mpc (1.0.3) и isl (0.18), а также GCC и Версия G.3 версии 8.3.0_2 установлена с использованием Homebrew в качестве фактических компиляторов (доступны через gcc-8 и g ++ - 8 соответственно). У меня также есть Mac OS X 10.5 SDK, установленный через XcodeLegacy, и извлеченный dsymutil из Xcode 6.4.
32-разрядная команда конфигурации PowerPC, приведенная в исходной статье, также выдает тот же вывод ошибок, что и любые другие команды, когда указана цель (например, powerpc64-unknown-linux-gnu
не удалось, как и x86_64-unknown-linux-gnu
и x86_64-apple-darwin18.5.0
). Эта точная команда (без указания цели) выполнена успешно:
CC=gcc-8 CXX=g++-8 ../gcc-8.3.0/configure \
--prefix=/opt/gcc/x86/8 --disable-nls --disable-multilib --enable-languages=c,c++,objc,obj-c++,lto --with-dwarf2
Я также заметил, что в выходных данных конфигурации команды без указанной цели указывалось, что g++
принял -static-libstdc++ -static-libgcc
, а в выходных данных команды кросс-компиляции указывалось, что это не так. Я посмотрел в скрипте конфигурации, чтобы увидеть, что он на самом деле там делал, и он пытается скомпилировать, а затем связать пример кода C ++, что в итоге приводит к ошибке. Таким образом, проблема, похоже, заключается либо в отсутствии установленных статических библиотек, либо в проблеме компоновщика или компилятора.
РЕДАКТИРОВАТЬ: У меня также есть Xcode 10.2.1 и инструменты командной строки для Xcode 10.2.1 (10E1001).
РЕДАКТИРОВАТЬ 2: Я попытался настроить сборку Linux x86-64 с помощью команды:
CC=gcc-8 CXX=g++-8 ../gcc-8.3.0/configure \
--prefix=/opt/gcc/x86-64/8 --disable-nls --disable-multilib --enable-languages=c,c++,objc,obj-c++,lto --with-dwarf2 \
--target=x86_64-unknown-linux-gnu
без предварительного добавления старой версии dsymutil
к моему пути (которую я не удалил при первой попытке ввода команды), которая успешно создала файл конфигурации (обратите внимание, что macOS также поставляется с более новой версией из dysmutil
, который больше не поддерживает устройства PowerPC, и что местоположение более старой версии было специально добавлено в начало PATH, чтобы оно было найдено первым).
Кроме того, в выводе указано, что g++
также принял -static-libstdc++ -static-libgcc
. Поскольку я использую тот же компилятор, я думаю, что это предполагает, что проблема заключается в компоновщике Mac или статических библиотеках. Однако из того, что я понимаю о dysmutil
и журналах консоли, это не является причиной сбоя, а дает сбой в результате этого, поэтому я не знаю, насколько это важно. Я также попытался вызвать сбойную команду непосредственно со старой версией dysmutil
в моем пути и без нее (без других изменений), и она выдает то же самое сообщение об ошибке (утверждение не выполнено и т. Д.) С ним и без сообщения об ошибке. без этого.
РЕДАКТИРОВАТЬ 3: Итак, я провел поиск, и, очевидно, static-libstdc++
и static-libgcc
являются частью GCC и требуют сборки GNU binutils (что у меня есть). Я использовал ld
, как определено в статье (которая в основном просто называет систему Apple ld
, если она нацелена на PowerPC), поскольку GNU binutils 'ld
не поддерживает Darwin. Может ли это быть источником проблемы?