OS X在stdlib.h中包含heapsort,它与排序库中的heapsort冲突

时间:2011-02-12 07:22:51

标签: c sorting shared-libraries heapsort

我正在使用Ariel Faigon的排序库,在这里找到: http://www.yendor.com/programming/sort/

我能够让我的所有代码都在Linux上运行,但不幸的是,当我尝试在Mac上使用GCC进行编译时,它的默认stdlib.h包含另一个heapsort,不幸的是会导致类型冲突的错误。

这是Apple heapsort的手册页: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/heapsort.3.html

在排序库标题中注释掉堆会导致一大堆问题。 (原谅双关语)

我还简要地想过评论我对stdlib.h的使用,但是我使用了malloc和realloc,所以根本不会有用。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

将Ariel Faigon功能的使用隔离在一个不需要使用<stdlib.h>的单个小文件中。确保在标准C库之前链接Ariel Faigon的库。

答案 1 :(得分:4)

您可以尝试定义_POSIX_C_SOURCE

$ gcc -E /usr/include/stdlib.h | grep heap
int heapsort(void *, size_t, size_t,
int heapsort_b(void *, size_t, size_t,

$ gcc -E -D_POSIX_C_SOURCE /usr/include/stdlib.h | grep heap
# No output at all this time

希望_POSIX_C_SOURCE不会压制你需要的任何东西。

您可以经常使用_POSIX_C_SOURCE_BSD_SOURCE_XOPEN_SOURCE_KEEP_YOUR_STUPID_EXTENSIONS_OUT_OF_STANDARD_HEADERS的某些组合解决这些问题,...有时它们会相互争斗Jonathan Leffler建议你留下源分区方案。