我已经获得了一些项目的入门代码,我必须在我正在上课的课程中完成。代码在大学计算机上编译得很好但是当我尝试在我自己的计算机上编译代码时,由于函数调用strdup我得到错误。从我可以收集的结果来看,这是因为strdup不是ISO c99函数(https://bugzilla.redhat.com/show_bug.cgi?id=130815)。我该怎么做才能编译代码?我想我只需要输入一些额外的编译器标志,但我不确定是哪些。如果你需要我运行的信息g++ -v
,这里是输出:
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
答案 0 :(得分:0)
将-D_BSD_SOURCE
或-D_SVID_SOURCE
添加到编译行,您将公开strdup()
答案 1 :(得分:0)
赛斯的答案是正确的。如果它不适合你,也可以将-std = gnu99编译器选项传递给g ++(它自动定义所有常见的测试宏)。
请务必在命令行末尾添加所有选项,因为以后的选项会覆盖较新的选项!
以下是GNU glibc的测试宏要求(来自联机帮助页):
Since glibc 2.12:
_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED ||
_POSIX_C_SOURCE >= 200809L
Before glibc 2.12:
_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
我不知道为什么POSIX> = 200809L是必需的,因为联机帮助页说它符合POSIX.1-2001。