Clang не видит strdup и некоторые другие функции

0

Я пытаюсь скомпилировать программу C++, которая по исторической причине использует некоторые функции библиотеки C в OS X Mavericks. По какой-то причине Clang не видит strdup, popen и некоторые другие функции. Я заглянул внутрь string.h, и ясно, что он хочет, чтобы его C-стандарт набросился, но я не могу этого сделать, потому что это C++ код. Что я делаю?

Вот что я использую для создания приложения:

#!/bin/sh

PLATFORM=$(uname -s)

SOURCES="..."

if [ "$PLATFORM" = "Linux" ]; then
    PATHS="..."
    LIBS="..."
elif [ "$PLATFORM" = "FreeBSD" ]; then
    PATHS="..."
    LIBS="..."
elif [ "$PLATFORM" = "Darwin" ]; then
    PATHS="..."
    LIBS="..."
else
    echo 'Unknown platform!'
fi

g++ -o app $PATHS -O3 -g3 -Wall -D_POSIX_SOURCE $SOURCES -pthread $LIBS
  • 3
    Ни strdup ни popen являются стандартными функциями. Для strdup могу ли я предложить std::string s2 = s1; ?
  • 0
    Что ты мог сделать? Вы можете показать нам свою связь с флагами вашего компилятора или ваши включаемые части исходных файлов / заголовочных файлов. Не имеет значения, для чего это будет необходимо. На такой вопрос это никогда не повредит.
Показать ещё 9 комментариев
Теги:
clang

1 ответ

1
Лучший ответ

Согласно стандарту Posix, на который я смотрю (Posix 2008), имя символа, которое вы хотите определить, - _POSIX_C_SOURCE. В стандарте говорится, что Posix 1990 указал макрос _POSIX_SOURCE, который был заменен _POSIX_C_SOURCE, поэтому может быть проблемой обновления скрипта сборки. (Я бы продолжил и определил и то и другое, и, вероятно, также _XOPEN_SOURCE, чтобы быть уверенным. _XOPEN_SOURCE до 700, а два других - к 200809L, эти определения, по-видимому, предполагают Posix 2008).

  • 0
    Да, этот макрос действительно был проблемой, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню