2011-02-12 54 views
2

我使用阿里爾Faigon的排序庫發生衝突,在這裏找到: http://www.yendor.com/programming/sort/OS X包含堆排序stdlib.h中與堆排序中排序庫

我能得到我的代碼在Linux上工作,但不幸的是,當試圖在Mac上使用GCC進行編譯時,它的默認stdlib.h包含另一個heapsort,不幸的是會導致類型錯誤的衝突。

這裏的手冊頁蘋果堆排序: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/heapsort.3.html

註釋掉排序庫頭的堆排序引起的問題一大堆。 (赦免雙關)

我也簡單想過註釋掉我使用stdlib.h,但我使用malloc和realloc,所以根本不起作用。

任何想法?

回答

5

在不需要使用<stdlib.h>的單個小文件中隔離使用Ariel Faigon的功能。確保您將Ariel Faigon的庫鏈接到標準C庫之前。

+0

這似乎很多向後彎曲,使這項工作。 – 2011-02-12 08:38:40

+0

@Chris - 是的,沒有。該文件可能包含兩條`#include`行,一個用於項目自己的聲明,另一個用於所需的heapsort聲明以及一個可能佔用4行的函數。加註釋等等。該功能本身只是通過中繼呼叫。坦率地說,這可能比修改構建過程更容易,以改變用於編譯不同源文件的編譯標誌。而且,一旦完成,代碼將很少需要改變。如果你有一個更簡單的解決方案,建議。 – 2011-02-12 16:08:18

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 ......雖然有時這樣留給你的源分區方案爲喬納森·萊弗勒建議他們互相爭鬥。