为什么我会收到 cc1plus: error: unrecognized command line option "-arch"?

问题描述 投票:0回答:5
/usr/bin/make -f nbproject/Makefile-Debug.mk SUBPROJECTS= .build-conf
/usr/bin/make  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/cppapplication_1
mkdir -p build/Debug/GNU-MacOSX
rm -f build/Debug/GNU-MacOSX/main.o.d
g++ -arch i386   -c -g -MMD -MP -MF build/Debug/GNU-MacOSX/main.o.d -o build/Debug/GNU-MacOSX/main.o main.cpp
cc1plus: error: unrecognized command line option "-arch"
make[2]: *** [build/Debug/GNU-MacOSX/main.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 311ms)

simpatico$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/x86_64-apple-darwin10/4.5.1/lto-wrapper
Target: x86_64-apple-darwin10
Configured with: ../gcc-4.5.1/configure --prefix=/opt/local --build=x86_64-apple-darwin10 --enable-languages=c,c++,objc,obj-c++,fortran,java --libdir=/opt/local/lib/gcc45 --includedir=/opt/local/include/gcc45 --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/gcc-4.5 --with-local-prefix=/opt/local --with-system-zlib --disable-nls --program-suffix=-mp-4.5 --with-gxx-include-dir=/opt/local/include/gcc45/c++/ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --enable-stage1-checking --disable-multilib --enable-fully-dynamic-string
Thread model: posix
gcc version 4.5.1 (GCC) 

这个简单的文件:

#include <stdlib.h>

int main(int argc, char** argv) {

    return (EXIT_SUCCESS);
}
c++ macos gcc g++ gcc4
5个回答
17
投票

-arch
选项是 Apple 对
gcc
扩展的一部分。 您需要使用 Apple 开发者工具提供的
gcc
Xcode


2
投票

-arch
选项仅存在于Apple提供的
gcc
版本中。更改
CFLAGS
(可能通过您的环境、makefile 或配置选项进行设置),使其使用
-march
-m32
代替。例如:

配置 CFLAGS='-m32 -O2' CC=gcc-4.5

区别似乎在于您可以指定多个

-arch
选项来生成通用二进制文件,而
-march
一次只能生成一个。


1
投票

无论机器或构建类型如何,此错误都会以多种形式存在。 一般来说,解决方案是更改 PATH 和 CROSS_COMPILE 变量以包含正确的交叉编译器。


1
投票

GCC 的 macports 版本不支持 -arch 标志。 事实证明,Apple 的 GCC 是真正的 gcc 的包装器,它在调用真正的编译器之前遵循一些特殊的标志。 -arch 标志是这些标志之一。 它为每个指定的架构调用适当的编译器,然后使用 lipo 将所有目标文件重新组合成一个“胖”目标文件。

我刚刚花了一点时间让这个 Apple GCC 包装器与 macports GCC 一起工作。 如果您想了解详细信息,可以在这里找到:

http://thecoderslife.blogspot.com/2015/07/building-with-gcc-46-and-xcode-4.html


0
投票
Debian Bookworm 的 gcc 源代码中也缺少

-arch。相当蹩脚。导致大量编译失败。

© www.soinside.com 2019 - 2024. All rights reserved.