十四, 2024-10-31 16:54 采纳率: 0%
浏览 286
已结题

vxworks交叉编译gcc报错error: missing binary operator before token "("

我正在进行为了vxworks而定制的交叉编译环境,参考的是如下这两个教程:
定制交叉编译环境-gcc https://cloud.tencent.com/developer/article/1398405
在Vx-Works平台实现交叉编译工具链的开发及优化研究 https://www.elecfans.com/emb/202003071176114.html

我的host环境是:x86_64-pc-cygwin
我的vxworks环境是:powerpc vxworks-6.9

前面按照流程一步步进行:
①安装一下binutils,然后把binutils的include/libiberty.h复制到vxworks的include文件夹中
②顺序安装了mpc,mpfr,gmp
③编译gcc
我先执行了./configure,如下:

 ./configure --target=$TARGET --prefix=$PREFIX --exec-prefix=$PREFIX --with-headers=/cygdrive/d/WindRiver/vxworks-6.9/target/h --with-libs=/cygdrive/d/WindRiver/vxworks-6.9/target/lib --with-included-gettext --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --with-mpc=/usr/local/mpc --with-isl=/usr/local/isl -v

然后执行make:

make LANGUAGES="c c++" all-gcc all-target-libgcc

然后报错以下error: missing binary operator before token "("

In file included from ../.././gcc/c/c-lang.cc:22:
../.././gcc/system.h:333:33: error: missing binary operator before token "("
  333 | #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM(t)))
      |                                 ^
../.././gcc/system.h:541:19: note: in expansion of macro ‘INTTYPE_MAXIMUM’
  541 | # define SIZE_MAX INTTYPE_MAXIMUM(size_t)
      |                   ^~~~~~~~~~~~~~~
../.././gcc/hwint.h:123:5: note: in expansion of macro ‘SIZE_MAX’
  123 | #if SIZE_MAX <= UINT_MAX
      |     ^~~~~~~~
../.././gcc/system.h:333:33: error: missing binary operator before token "("
  333 | #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM(t)))
      |                                 ^
../.././gcc/system.h:541:19: note: in expansion of macro ‘INTTYPE_MAXIMUM’
  541 | # define SIZE_MAX INTTYPE_MAXIMUM(size_t)
      |                   ^~~~~~~~~~~~~~~
../.././gcc/hwint.h:126:7: note: in expansion of macro ‘SIZE_MAX’
  126 | #elif SIZE_MAX <= ULONG_MAX
      |       ^~~~~~~~
make[1]: *** [Makefile:1198: c/c-lang.o] Error 1
make[1]: Leaving directory '/cygdrive/c/Users/15861/Downloads/gcc-14.2.0/gcc-14.2.0/host-x86_64-pc-cygwin/gcc'
make: *** [Makefile:4678: all-gcc] Error 2


这问题几天了还是解决不了,真不知道什么问题,修改了INTTYPE_MAXIMUM函数也还是不行,一直报错,麻烦各位帮忙看看谢谢!

  • 写回答

27条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-10-31 16:54
    关注
    获得0.45元问题酬金

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    在使用GCC进行交叉编译时,出现错误信息“MISSING BINARY OPERATOR BEFORE TOKEN '('”可能是因为你缺少必要的前缀来解析和处理这个符号。这通常发生在编译过程中,当你尝试将一个表达式或函数作为参数传递给一个C/C++宏时,它需要一个前缀来识别并执行这些操作。这种情况下,你需要确保你的源代码中包含必要的前缀,并且这些前缀是正确的。

    解决方法:

    1. 确保你的源代码中包含了必要的前缀。例如,如果源代码中有#INCLUDE <STDIO.H>,那么你需要添加以下代码来正确地解析并处理这个符号:
    #INCLUDE <STDIO.H>
    
    1. 检查你的源代码是否已经包含了必要的前缀。你可以通过查看源代码中的注释或查看GCC的帮助文档来确认这一点。
    2. 如果你的源代码没有包含必要的前缀,或者你不确定前缀在哪里,可以考虑使用GCC的--NO-PREFIX选项来忽略前面的符号。例如,在交叉编译环境中,你可以这样设置GCC的参数:
    --NO-PREFIX GCC -O MYPROGRAM.EXE MYPROGRAM.C
    

    注意:这种方法可能会导致编译器无法找到所需的前缀,因为前缀可能是从其他符号开始的。在这种情况下,你可能需要手动添加前缀。

    总之,如果你在交叉编译过程中遇到这个问题,建议检查你的源代码中是否有必要的前缀,并确保它们是正确的。同时,考虑到交叉编译过程中的可能性,最好先确定前缀的位置,然后根据情况选择合适的选项。

    评论

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 创建了问题 10月31日