簡體   English   中英

PostgreSQL:在Windows 8 64bit上編譯C函數

[英]PostgreSQL: compile C function on Windows 8 64bit

我正在學習如何編譯C觸發器以在PostgreSQL上加載

當編譯“ trigf.c”時(在http://www.postgresql.org/docs/9.3/interactive/trigger-example.html的示例中),我得到一些與int64錯誤(ch標頭)有關的問題

#ifdef HAVE_LONG_INT_64
/* Plain "long int" fits, use it */

#ifndef HAVE_INT64
typedef long int int64;
#endif
#ifndef HAVE_UINT64
typedef unsigned long int uint64;
#endif
#elif defined(HAVE_LONG_LONG_INT_64)
/* We have working support for "long long int", use that */

#ifndef HAVE_INT64
typedef long long int int64;
#endif
#ifndef HAVE_UINT64
typedef unsigned long long int uint64;
#endif
#else
/* neither HAVE_LONG_INT_64 nor HAVE_LONG_LONG_INT_64 */
#error must have a working 64-bit integer datatype
#endif

-> [錯誤] #error必須具有有效的64位整數數據類型

我不知道如何解決該問題,因為顯然我可以使用一個有效的64位整數數據類型。

編輯:我從二進制安裝pgsql。 我用於編譯C函數文件的C編譯器是MinGW GCC 4.7.2。 (使用Dev-cpp mingw gcc的路徑)。

命令行是:gcc -fpic -c“ D:\\ trigf.c”

第一次,它在ch中顯示一個錯誤:找不到libintl.h(沒有這樣的文件或目錄)。 然后,我下載了Lib Intl-0.14.4(支持本地語言的庫)。 安裝將創建一個文件夾:C:\\ Program Files(x86)\\ GnuWin32。 我編輯了環境變量CPATH,添加了包含libintl.h的C:\\ Program Files(x86)\\ GnuWin32 \\ include文件夾。

我再次運行了命令,遇到了上面的錯誤。

更新 :事實證明,在Windows上使用MSVC獨立構建擴展不是太難。 寫了一篇博客文章,詳細介紹了今天的過程


在Windows上構建擴展的通常方法是在工作的PostgreSQL構建樹中進行擴展。

請參閱PostgreSQL Wiki上的這些說明

您也許可以使用MinGW和PGXS並使用合適的Makefile來做到這一點。

僅嘗試編譯獨立的.c文件不太可能起作用,因為需要各種路徑和預處理器定義。

當前的PostgreSQL軟件包不包含公共依賴的頭文件並沒有幫助,這確實令人沮喪。 即使目標PostgreSQL是使用ENABLE_NLS構建的,您也可以在沒有定義ENABLE_NLS情況下安全地進行編譯,在這種情況下, libintl.h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM