我正在尝试编译一个C ++程序,由于历史原因,它在OS X Mavericks上使用了一些C库函数。出于某种原因,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
答案 0 :(得分:1)
根据我正在观察的Posix标准(Posix 2008),
您要定义的符号名称为_POSIX_C_SOURCE
。该
标准说Posix 1990指定了一个宏_POSIX_SOURCE
,
已被_POSIX_C_SOURCE
取代,所以它可能只是
是一个更新您的构建脚本的问题。 (我会继续前进
定义两者,也可能_XOPEN_SOURCE
,只是为了确定。
_XOPEN_SOURCE
到700
,另外两个到200809L
;这些
定义似乎是Posix 2008所期望的。)