【问题标题】:Error trying to exec cc1, gcc only wants to compile for avr?尝试执行 cc1 时出错,gcc 只想为 avr 编译?
【发布时间】:2012-06-29 00:18:48
【问题描述】:

我已经在我的 Mac (Snow Leopard) 上安装了 gcc,因此我可以针对 AVR 微控制器进行编译。但是,它似乎阻止了我为其他任何东西进行编译。我想从 astrometry.net 构建软件包,当我运行 ./configure 然后 make 我得到以下内容:

make -C ./qfits-an stage CFLAGS=" -g -Wall -ffinite-math-only -fno-signaling-nans  -march=native -O3 -fomit-frame-pointer -DNDEBUG -fPIC -Winline -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE" LDFLAGS=" -g -Wall -ffinite-math-only -fno-signaling-nans  -march=native -O3 -fomit-frame-pointer -DNDEBUG -fPIC -Winline" CC="gcc"
make -C src stage
gcc -g -Wall -ffinite-math-only -fno-signaling-nans  -march=native -O3 -fomit-frame-pointer -DNDEBUG -fPIC -Winline -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE   -c -o anqfits.o anqfits.c
gcc: error trying to exec 'cc1': execvp: No such file or directory    

gcc -v 给出:

Using built-in specs.
Target: avr
Configured with: ./configure --target=avr --enable-languages=c,c++ --disable-nls --disable-libssp --prefix=/usr/local/staging.avr-gcc
Thread model: single
gcc version 4.1.1

我不知道如何继续!似乎目前一切都设置为只为 AVR 平台构建,但我安装了 Xcode,所以在某个地方有更多版本的 gcc 潜伏着。此安装是通过http://www.micahcarrick.com/installing-gnu-tools-avr-gcc.html 进行的,如果这有助于了解它是如何设置的(我在此之前安装了 Xcode)。

我希望解决方案很简单。我只是想避免弄乱我的设置,然后无法为任何一个平台编译。

非常感谢!

【问题讨论】:

    标签: macos gcc compiler-errors


    【解决方案1】:

    您可能希望删除已安装的 AVR 工具的非交叉编译器命名版本(即gccld 等),因此只有交叉编译器和相关工具可用使用特定于目标的名称。

    为此,找到它们的安装目录(/usr/local/bin?)并找到同时安装的所有工具。例如,这就是在我的 Linux 机器上发生的事情(给你一个想法):

    $ which gcc
    /usr/bin/gcc
    $ cd /usr/bin
    $ ls -li *gcc*
    189389 -rwxr-xr-x 2 root root 268088 Dec  6  2011 gcc
    195145 -rwxr-xr-x 1 root root   2018 Aug 16  2010 gccmakedep
    189389 -rwxr-xr-x 2 root root 268088 Dec  6  2011 x86_64-redhat-linux-gcc
    

    然后我将删除gcc,留下x86_64-redhat-linux-gcc 作为启动该编译器的唯一方法(它们是硬链接的,因为它们共享相同的inode)。还会有其他工具,您可以在同一目录中按日期识别。

    另一种方法是将交叉编译器安装到不在您的$PATH 中的目录中。

    【讨论】:

    • 运行which 给出/usr/local/avr/bin/gcc。如果我天真地注释掉我的 .bash_profile 中包含的有问题的 $PATH ,那么一切正常(直到我想编译一个 AVR 程序)。我认为它在寻找 avr-gcc 所以我想我可以在 /usr/local/bin 中创建一个符号链接?
    • 不,只需在交叉编译时将Makefile 中的CC 更改为/usr/local/avr/bin/gcc
    • 谢谢;也帮我解决了这个问题,你知道为什么这个解决方案只在 Makefile 中设置 CC 时有效,而不是在用作 env 变量时有效吗?即:CC=/usr/local/bin/avr-gcc avr-gcc -g -Os -S -mmcu=atmega2560 main.c 有 cc1 问题
    • @Tristian 不懂那个命令行。您设置了$CC,然后使用avr-gcc 调用编译器?很奇怪。
    • 是的,我假设 avr-gcc 在内部使用一个名为 CC 的环境变量来进一步调用编译器(本身),因此为什么在生成文件中将其设置为 /usr/local/bin/avr-gcc 会导致编译成功,我只是尝试了以下方法:CC=/usr/local/bin/avr-gcc $CC -g -Os -S -mmcu=atmega2560 main.c 现在成功了,有趣...
    猜你喜欢
    • 1970-01-01
    • 2016-01-22
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多