3

我已经获得了一些我必须在我正在上课的课程中完成的项目的入门代码。该代码在大学计算机上编译得很好,但是当我尝试在自己的计算机上编译代码时,由于函数调用 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) 
4

2 回答 2

0

添加-D_BSD_SOURCE-D_SVID_SOURCE到您的编译行,您将公开 strdup()

于 2011-02-17T20:31:03.743 回答
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。

于 2011-05-07T14:07:29.967 回答