在macOS Mojave上交叉编译到目标PowerPC时,GCC 8一致性测试失败

时间:2019-04-22 08:27:58

标签: macos gcc compilation cross-compiling powerpc

我正在尝试为运行macOS Mojave的Intel MacBook Pro交叉编译,以针对PowerPC G5 Mac进行编译。我尝试遵循here中步骤的修改版本,但是我的configure命令失败,并显示以下错误消息:

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"

我的配置日志(可用here)在错误消息后指出:

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和使用Homebrew作为实际编译器安装的G ++版本8.3.0_2(分别通过gcc-8和g ++-8访问)。我还通过XcodeLegacy安装了Mac OS X 10.5 SDK,并从Xcode 6.4中提取了dsymutil。

原始文章中给出的32位PowerPC配置命令也提供了相同的失败输出,在指定目标时(例如powerpc64-unknown-linux-gnu失败,x86_64-unknown-linux-gnu和{ {1}})。此确切命令(无目标规范)已成功完成:

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++,而在交叉编译器配置命令输出中则表明它没有t。我查看了configure脚本,看看它在那里实际执行了什么,然后尝试编译然后链接示例C ++代码,最终失败了。因此,问题似乎可能是缺少安装的静态库,或者是链接器或编译器出现问题。


编辑:我也安装了Xcode 10.2.1和用于Xcode 10.2.1(10E1001)的命令行工具。

编辑2:我尝试使用以下命令配置Linux x86-64构建:

-static-libstdc++ -static-libgcc

无需先将旧版本的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 添加到我的路径中(第一次尝试该命令时我并未将其删除),这确实创建了一个配置文件(请注意,macOS还附带了一个较新版本的dsymutil,该版本不再支持PowerPC设备,并且较旧版本的位置专门添加到PATH的前面,以便首先找到它。)

此外,输出表明dysmutil也接受了g++。当我使用同一编译器时,我认为这表明问题出在Mac链接器或静态库中。但是,根据我对-static-libstdc++ -static-libgcc和控制台日志的了解,这不是失败的原因,而是失败的结果,所以我不知道这样做的重要性。我还尝试使用路径中的旧版本dysmutil直接调用失败的命令本身,并且不使用它(没有其他更改),并且使用同样的错误消息(断言失败等)给出相同的错误消息。没有它的错误消息。

编辑3:因此,我进行了一些搜索,显然dysmutilstatic-libstdc++是GCC的一部分,并且需要构建GNU binutils(我拥有)。我使用的是本文中定义的static-libgcc(如果将PowerPC定位为目标,则基本上称为Apple系统ld),因为GNU binutils的ld不支持Darwin。这可能是问题的根源吗?

0 个答案:

没有答案