0

我在嵌入式平台上运行Linaro Ubuntu 12.03 。在使用这个系统几个月来构建一个简单的程序后,我在添加优化选项时开始收到编译错误。所以,我创建了一个测试程序:

// test.c
#include <string.h>

int main(int argc, char *argv[])
{
    return 0;
}

编译:

gcc test.c

工作得很好。但是,当我添加优化选项时:

gcc -O1 test.c

我收到一个错误:

In file included from /usr/include/string.h:637:0,
                 from test.c:1:
/usr/include/arm-linux-gnueabi/bits/string2.h:1305:3: error: "(" may not appear in macro parameter list

-O1从到的所有级别都会发生这种情况-Ofast

在另一个带有Linaro Ubuntu 12.04的嵌入式系统上尝试同样的方法,它工作得很好。在我的 Ubuntu PC 上也是如此。

中的代码部分string2.h

#  define __strdup(sp \
  (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s)       \
          ? (((__const char *) (s))[0] == '\0'                \
             ? (char *) calloc ((size_t) 1, (size_t) 1)           \
             : ({ size_t __len = strlen (s) + 1;              \
              char *__retval = (char *) malloc (__len);       \
              if (__retval != NULL)                   \
                __retval = (char *) memcpy (__retval, s, __len);  \
              __retval; }))                       \
          : __strdup (s)))

(问题出在宏的第二行)

为什么我的构建环境在没有明显原因的情况下停止工作?


更新 1:

我刚刚检查了另一块运行 12.03 的板上的相同文件,以及 12.04 系统上的文件。看起来string2.h第一块板上的文件确实存在语法错误。另外两个文件显示:

#  define __strdup(s) \

代替:

#  define __strdup(sp \

所以它)被替换为p. 我现在能想到的唯一解释是我使用的 SD 卡开始损坏文件。然而,任何其他解释都是值得赞赏的。

4

1 回答 1

0

由于它以前可以工作并string2.h在SD卡上进行了更改,因此至少SD卡中可能存在坏扇区。

于 2013-09-11T04:17:17.077 回答