MacOSX上的g++无法使用-arch ppc64选项。

5

我正在尝试使用g++在MacOSX上构建通用二进制文件,但是它并没有真正起作用。我已经尝试了这个简单的虚拟代码:

#include <iostream>
using namespace std;
int main() {
    cout << "Hello" << endl;
}

这个很好用:

% g++ test.cpp -arch i386 -arch ppc -arch x86_64 -o test
% file test
test: Mach-O universal binary with 3 architectures
test (for architecture i386):   Mach-O executable i386
test (for architecture ppc7400):    Mach-O executable ppc
test (for architecture x86_64): Mach-O 64-bit executable x86_64

然而,这并不意味着:
% g++ test.cpp -arch i386 -arch ppc -arch x86_64 -arch ppc64 -o test
In file included from test.cpp:1:
/usr/include/c++/4.2.1/iostream:44:28: error: bits/c++config.h: No such file or directory
In file included from /usr/include/c++/4.2.1/ios:43,
                 from /usr/include/c++/4.2.1/ostream:45,
                 from /usr/include/c++/4.2.1/iostream:45,
                 from test.cpp:1:
/usr/include/c++/4.2.1/iosfwd:45:29: error: bits/c++locale.h: No such file or directory
/usr/include/c++/4.2.1/iosfwd:46:25: error: bits/c++io.h: No such file or directory
In file included from /usr/include/c++/4.2.1/bits/ios_base.h:45,
                 from /usr/include/c++/4.2.1/ios:48,
                 from /usr/include/c++/4.2.1/ostream:45,
                 from /usr/include/c++/4.2.1/iostream:45,
                 from test.cpp:1:
/usr/include/c++/4.2.1/ext/atomicity.h:39:23: error: bits/gthr.h: No such file or directory
/usr/include/c++/4.2.1/ext/atomicity.h:40:30: error: bits/atomic_word.h: No such file or directory
...

你有任何想法为什么会这样吗?

我使用的是MacOSX 10.6操作系统,已经安装了带有所有SDK的Xcode 3.2.2。默认的编译器是GCC 4.2,而GCC 4.0则会产生一些不同的错误,但行为类似。

1个回答

7

Snow Leopard不再支持ppc64。如果您使用Mac OS X 10.5 SDK进行构建和链接,仍然可以使用ppc64。

请在命令行尝试以下命令:

g++ test.cpp -arch i386 -arch ppc -arch x86_64 -arch ppc64 -mmacosx-version-min=10.5 -isysroot/Developer/SDKs/MacOSX10.5.sdk -DMACOSX_DEPLOYMENT_TARGET=10.5 -o test

或者如果使用10.4 SDK,则使用:

g++-4.0 test.cpp -arch i386 -arch ppc -arch x86_64 -arch ppc64 -mmacosx-version-min=10.4 -isysroot/Developer/SDKs/MacOSX10.4u.sdk -DMACOSX_DEPLOYMENT_TARGET=10.4 -o test

请注意,如果您想使用10.4 SDK,则需要使用gcc 4.0(或g++4.0)。苹果的GCC 4.2不支持10.4 SDK。


4
这并不是GCC的问题。问题在于MacOSX10.6.sdk中没有ppc64,而不是GCC不支持ppc64。GCC仍然支持ppc64。只是在10.6 SDK中没有带有ppc64支持的C++运行时。 - Grant Limberg
太棒了,谢谢!那个命令有效。使用10.4 SDK会是什么样子呢?因为我无法让它起作用。 - Albert
1
请注意:10.4 SDK不能与GCC 4.2直接使用(只能与GCC 4.0一起使用)。请参考我的答案,了解如何使其适用于GCC 4.2:https://dev59.com/e03Sa4cB1Zd3GeqPx8aj#2831042。或许你可以将这个信息添加到你的答案中。 - Albert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接