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

セスの答えは正しいです。それがうまくいかない場合は、-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.1-2001に準拠していると記載されているため、POSIX>=200809Lが必要な理由はわかりません。

于 2011-05-07T14:07:29.967 に答える
0

-D_BSD_SOURCEorをコンパイル行に追加-D_SVID_SOURCEすると、 strdup() が公開されます

于 2011-02-17T20:31:03.743 に答える