2015-01-07 2 views
1

여기에 제공된 지침에 따라 첫 번째 DLL을 만들려고합니다. https://en.scribd.com/doc/40725510/Build-PostgreSQL-C-Functions-on-Windows 이 함수는 간단하며 다른 컴퓨터에서 작동됩니다.Microsoft Visual Studio를 사용하여 Windows에서 64 비트 PostgreSQL 데이터베이스 용 C 함수 DLL 만들기

#include "postgres.h" 
#include "fmgr.h" 
#include <windows.h> 

#ifdef PG_MODULE_MAGIC 
PG_MODULE_MAGIC; 
#endif 

#if defined(_WIN32) 
#define DLLEXPORT __declspec(dllexport) 
#else 
#define DLLEXPORT 
#endif 

#define WIN32_LEAN_AND_MEAN 
#define NOCOMM 

PG_FUNCTION_INFO_V1(fibbonachi); 
DLLEXPORT Datum 
fibbonachi(PG_FUNCTION_ARGS) 
{ 
    int32 arg = PG_GETARG_INT32(0); 
    if (arg > 0 && arg < 100) 
    { 
     if (arg == 1 || arg == 2) 
      PG_RETURN_INT32(1); 
     else 
     { 
      int arr[100]; 
      arr[0] = 1; 
      arr[1] = 1; 
      for (int i = 2; i < arg; i++) 
       arr[i] = arr[i - 1] + arr[i - 2]; 
      PG_RETURN_INT32(arr[arg - 1]); 
     } 
    } 
    else 
     PG_RETURN_INT32(0); 
} 

구성 관리자에서 Active Solution Platform으로 Win32를 사용하는 한 빌드가 성공합니다. 그러나, 나는 코드에 따라 pgAdmin에서 함수를 작성하려고하면

CREATE or REPLACE FUNCTION fibbonachi(integer) RETURNS integer 
AS E'D:\\Homework\\Databases\\PostgreSQL_dll\\Debug\\PostgreSQL_dll.dll', 'fibbonachi' 
LANGUAGE C STRICT; 

내가 오류 "% 1은 올바른 Win32 응용 프로그램이 아닙니다"얻는다. 그것은 PostgreSQL의 64 비트 버전을 사용하기 때문에 예상됩니다. 그러나 솔루션 플랫폼을 x64로 바꾸면 (잘못하지 않은 경우 오류를 수정하는 데 필요합니다) progect를 빌드하면 MSVCRTD.lib 파일의 "확인할 수없는 외부 기호"오류 32 개가 발생합니다. 비슷한 문제에 대한 토론을 여기에서 발견했습니다 : https://social.msdn.microsoft.com/Forums/vstudio/en-US/c1553a42-7d1e-4c74-9156-95768a72e4df/unresolved-externals-after-upgrading-from-vs2008-to-vs2010?forum=vcgeneral 다른 버전의 Visual Studio에서 충돌하는 라이브러리로 인해 오류가 발생하지만 재설치가 도움이되지 않아 수동으로 경로를 수정하는 방법을 모릅니다. 여전히 내 문제가 동일하다는 것을 완전히 확신하지 못함). 내가 사용하는 경로는 명령과 동일하지만 대신 PostgreSQL을의 64 비트 버전을 사용 sucsessfully의 x64 progect을 구축하는 방법의

C:\Program Files\Microsoft SDKs\Windows\v7.0\Include 
C:\Program Files\PostgreSQL\9.3\include\server\port\win32 
C:\Program Files\PostgreSQL\9.3\include\server\port 
C:\Program Files\PostgreSQL\9.3\include\server 
C:\Program Files\PostgreSQL\9.3\include\internal 
+directory of dummy header libintl.h 

어떤 아이디어?

+0

최근에 내가 작성한 블로그 기사 : http://blog.2ndquadrant.com/compiling-postgresql-extensions-visual-studio-windows/도 참조하십시오. –

답변

0

흠, 내 급우가 내 설정을 확인했는데 포함 된 경로의 Microsoft SDK 폴더가 명령에 필요하다는 사실에도 불구하고 이상한 이유로 이러한 오류가 발생하는 것으로 보입니다. 그는 그가이 정보를 정확히 어디에서 발견했는지 기억하지 못합니다. 그럼에도 불구하고 문제가 해결되었습니다. progect는 Microsoft SDKs 폴더에 대한 경로없이 성공적으로 빌드되며 결과 dll을 사용하면 데이터베이스에 함수가 성공적으로 만들어집니다. 누군가가 도서관에서이 갈등의 이유를 알고 있다면, 나는 아직도 알고 싶습니다.

관련 문제