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