我正在为一个项目使用 utarray(uthash 库的一部分)。每当我包含它时,我都会收到以下错误:
utarray.h:221:3: error: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]
诚然,我在编译时使用了一些非常激进的标志(-Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99
),但我根本不明白为什么这应该是一个错误。 strdup
在string.h
中定义(根据man strdup
),这在utarray.h
中非常清楚地包含在内。
我做错了什么?谷歌没有帮助。(显然没有其他人尝试使用这些标志编译utarray.h
?
下面是一个编译失败的示例文件(使用 gcc -Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99 scratch.c
)。
#include "utarray.h"
int main(int argc, char *argv[]) {
(void)argc;
(void)argv;
return 0;
}
版本: GCC 4.9.2, glibc 2.21, uthash 1.9.9
问题是strdup()
不是 c 标准函数,它是一个 POSIX 函数,除非在编译命令中添加以下-D_POSIX_C_SOURCE=200809L
,否则在使用 strdup()
时不能使用 -std=c99
gcc -Wall -Wpedantic -Wextra -Werror -pedantic-errors -std=c99 -D_POSIX_C_SOURCE=200809L
我在strdup)
上遇到了同样的错误,所以我添加了虚拟原型语句
char * strdup(char *) ;
我不再收到错误消息。