在Cygwin中编译binutils时执行make命令出现错误
操作背景与执行命令
在Cygwin环境中,按照《GCC-Cross-Compiler》文档编译binutils 2.42,执行的命令如下:
export PREFIX="$HOME/opt/cross"
../binutils-2.42/configure --target=amd64 --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror make CFLAGS="-march=x86-64-v2" && make install
编译时出现的错误信息
执行make命令后,出现如下错误(仅列出部分):
../../binutils-2.42/libiberty/pex-unix.c:259:14: 警告:隐式声明函数‘wait’;你是不是想写‘cwait’? [-Wimplicit-function-declaration]
259 | cpid = wait (status);
| ^~~~
| cwait
../../binutils-2.42/libiberty/pex-unix.c: 在函数‘save_and_install_fd’中:
../../binutils-2.42/libiberty/pex-unix.c:385:11: 警告:隐式声明函数‘fcntl’ [-Wimplicit-function-declaration]
385 | flags = fcntl (old_fd, F_GETFD);
| ^~~~~
../../binutils-2.42/libiberty/pex-unix.c:385:26: 错误:‘F_GETFD’未声明(在此函数内第一次使用)
385 | flags = fcntl (old_fd, F_GETFD);
| ^~~~~~~
../../binutils-2.42/libiberty/pex-unix.c:385:26: 注:每个未声明的标识符在其出现的每个函数中只报告一次
../../binutils-2.42/libiberty/pex-unix.c:398:20: 错误:‘FD_CLOEXEC’未声明(在此函数内第一次使用)
398 | if ((flags & FD_CLOEXEC) == 0 && fcntl (old_fd, F_SETFD, FD_CLOEXEC) < 0)
| ^~~~~~~~~~
../../binutils-2.42/libiberty/pex-unix.c:398:55: 错误:‘F_SETFD’未声明(在此函数内第一次使用)
398 | if ((flags & FD_CLOEXEC) == 0 && fcntl (old_fd, F_SETFD, FD_CLOEXEC) < 0)
| ^~~~~~~
../../binutils-2.42/libiberty/pex-unix.c:411:31: 错误:‘F_DUPFD’未声明(在此函数内第一次使用)
411 | new_fd = fcntl (old_fd, F_DUPFD, 3);
| ^~~~~~~
../../binutils-2.42/libiberty/pex-unix.c: 在函数‘restore_fd’中:
../../binutils-2.42/libiberty/pex-unix.c:445:19: 错误:‘FD_CLOEXEC’未声明(在此函数内第一次使用)
445 | if (flags & FD_CLOEXEC)
| ^~~~~~~~~~
../../binutils-2.42/libiberty/pex-unix.c:447:29: 错误:‘F_SETFD’未声明(在此函数内第一次使用)
447 | return fcntl (old_fd, F_SETFD, flags);
(注:还有更多同类错误未列出)
已尝试的无效操作
- 调整编译选项
- 移除
-march=x86-64-v2编译参数
内容的提问来源于stack exchange,提问作者Sinfolke

