Сбой теста соответствия GCC 8 при кросс-компиляции на MacOS Mojave с целью PowerPC - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь получить кросс-компилятор для моего 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. Может ли это быть источником проблемы?

...