2011-02-17 50 views
2

我已經給了一個項目的起始代碼,我必須在我正在參加的課程中完成。代碼在大學計算機上編譯得很好,但是當我嘗試在自己的計算機上編譯代碼時,由於函數調用strdup而出現錯誤。從我可以收集這是由於strdup不是一個ISO c99功能(https://bugzilla.redhat.com/show_bug.cgi?id=130815)。我應該如何去編譯代碼?我想我只需要拋出一些額外的編譯器標誌,但我不確定哪些。如果你需要我跑g++ -v的信息,這裏是輸出:編譯器標誌顯示功能,如strdup

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

塞特的答案是正確的。如果它不適合你,也可以將-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 。

0

添加-D_BSD_SOURCE-D_SVID_SOURCE您編譯行,你會暴露的strdup()

+0

嗯......我嘗試了這兩種方法,但都沒有成功。任何其他想法? – blcArmadillo 2011-02-17 20:35:18