features.h标题的目的是什么?为什么以及何时可以在我的代码中使用它?
它是否定义了系统支持的源功能?或者它是否定义了一些必须根据其他定义定义的其他内容?
我在桌面上下载并构建了gcc 4.8.1,运行64位Ubuntu 12.04.我是根据文档推荐的源代码和命令构建的
../../gcc-4.8.1/configure --prefix=$HOME --program-suffix=-4.8
make
make -k check
make install
Run Code Online (Sandbox Code Playgroud)
它似乎通过了所有测试,并且我将所有内容安装到我的主目录中,后缀为-4.8,以区别于系统gcc,即版本4.6.3.
不幸的是,当我使用g ++ - 4.8编译c ++程序时,它链接到系统libc和libstdc ++,而不是从gcc-4.8.1编译的新程序.我下载并构建了gcc 4.8,因为我想在标准库中使用新的C++ 11功能,所以这种行为绝对不是我想要的.我该怎么做才能让gcc-4.8自动链接到它附带的标准库而不是系统标准库?
这个问题与为什么 pclose 提前返回有关?。我想知道libc交叉编译的可执行文件使用的是哪个版本。如下所述,存在一些限制,使得检查特定 gcc 编译器的 glibc 版本中的答案不适用。
检查libc版本的一种建议方法是使用gnu_get_libc_version()中声明的函数gnu/libc-version.h。我的跨工具链不包括libc-version.h.
另一个建议的解决方案是使用该-print-file-name gcc选项。链接问题中的这个答案完全不适合我:
$ /path/to/toolchains/ARM-cortex-m3-4.4/bin/arm-uclinuxeabi-gcc -print-file-name=libc.so
libc.so
$
$ /path/to/toolchains/ARM-cortex-m3-4.4/bin/arm-uclinuxeabi-gcc -print-file-name=foo.bar
foo.bar
$ # I really do not have a foo.bar file in existence
Run Code Online (Sandbox Code Playgroud)
ldd --version. 我的目标平台没有ldd:$ ldd
sh: can't execute 'ldd': No such file or directory
Run Code Online (Sandbox Code Playgroud)
__GLIBC__和__GLIBC_MINOR__- 但这些似乎也来自libc-version.h,它不存在于我的跨工具链中,如上所述。我的跨工具链似乎只提供libc.a,而不提供libc.so。
我尝试运行它libc.a …
我无法将inet_aton()ASCII IP 地址转换"192.168.0.1"为struct in_addr字节顺序的地址,因为我无法编译代码。
我正在处理这个文件:socket__geeksforgeeks_udp_server_GS_edit_GREAT.c
\n这是我的构建命令:
\ngcc -Wall -Wextra -Werror -O3 -std=c17 \\\nsocket__geeksforgeeks_udp_server_GS_edit_GREAT.c -o bin/server \\\n-lm && bin/server\nRun Code Online (Sandbox Code Playgroud)\n这是我的命令和错误输出:
\neRCaGuy_hello_world/c$ gcc -Wall -Wextra -Werror -O3 -std=c17 socket__geeksforgeeks_udp_server_GS_edit_GREAT.c -o bin/server -lm && bin/server\nsocket__geeksforgeeks_udp_server_GS_edit_GREAT.c: In function \xe2\x80\x98main\xe2\x80\x99:\nsocket__geeksforgeeks_udp_server_GS_edit_GREAT.c:159:15: error: implicit declaration of function \xe2\x80\x98inet_aton\xe2\x80\x99; did you mean \xe2\x80\x98inet_pton\xe2\x80\x99? [-Werror=implicit-function-declaration]\n retcode = inet_aton("127.0.0.1", &addr_server.sin_addr);\n ^~~~~~~~~\n inet_pton\ncc1: all warnings being treated as errors\nRun Code Online (Sandbox Code Playgroud)\n我要修复的部分是:
\nimplicit declaration of function \xe2\x80\x98inet_aton\xe2\x80\x99; did you …Run Code Online (Sandbox Code Playgroud)