Флаг компилятора для отображения таких функций, как strdup - PullRequest
2 голосов
/ 17 февраля 2011

Мне дали стартовый код для проекта, который я должен завершить в классе, который я посещаю. Код прекрасно компилируется на университетских компьютерах, однако, когда я пытаюсь скомпилировать код на своем собственном компьютере, я получаю ошибки из-за вызова функции 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) 

Ответы [ 2 ]

0 голосов
/ 07 мая 2011

Ответ Сета правильный.Если это не работает для вас, есть также возможность передать опцию компилятора -std = gnu99 в g ++ (он автоматически определяет все распространенные тестовые макросы).

Обязательно добавьте все опции в концекомандной строки, потому что более поздние опции перезаписывают более новые!

Вот требования тестового макроса для GNU glibc (из manpage):

       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 голосов
/ 17 февраля 2011

Добавьте -D_BSD_SOURCE или -D_SVID_SOURCE к вашей строке компиляции, и вы выставите strdup ()

...