본문 바로가기
프로그래밍/MFC

x86 MFC에서 PostgreSQL 사용하기

by 남생 namsaeng 2022. 4. 3.
반응형

이전 내용에서 PostgreSQL 11 버전부터 x64 MFC에서 사용할 수 없음을 확인하였다.

 

https://namsaenga.tistory.com/34

 

MFC에서 TimescaleDB 사용하기

PostgreSQL 11 이상부터 x64 윈도 플랫폼에서만 지원하고 TimescaleDB를 이용하기 위해서는 PostgreSQL 12 이상이어야 한다. 따라서 TimescaleDB는 x64 윈도 플랫폼에서 돌아가는 MFC에서만 사용할 수 있다. Postg..

namsaenga.tistory.com

 

PostgreSQL 10 버전을  x86 MFC에서 사용할 수 있는지 테스트했다.

 


 

1. PostgreSQL Windows Installer 10을 다운로드한 후에 설치한다.

 

2. CMake GUI를 열고 "Configure"을 클릭해 Win32로 설정해준다.

 

  • 빌드 프로그램 플랫폼 설정

CMake GUI Win32 설정

 

 

3. 아래와 같이 Entry 항목을 맞춰주고 "Generate" 버튼을 클릭한다.

 

  • Entry 항목 설정

Entry 항목 설정 그림

 

  • 설정 항목
PostgreSQL_LIBRARY C:\Program Files (x86)\PostgreSQL\10\lib
PostgreSQL_INCLUDE_DIR C:\Program Files (x86)\PostgreSQL\10\inclue

 

 

 

4. "Open Project"로 실행하여 ALL_BUILD 및 INSTALL 프로젝트의 속성을 아래와 같이 변경한 후에 차례로 빌드한다.

 

  • [구성 속성] > [고급] > [기본 설정 빌드 도구 아키텍처] > [32비트(x86)]
  • [구성 속성] > [고급] > [MFC 사용] > [정적 라이브러리에서 MFC 사용]

ALL_BUILD 속성 페이지

 

 

5. 이전 게시물인 "MFC에서 TimescaleDB 사용하기"를 참고하여 우리의 MFC 프로젝트 속성을 변경해주고 빌드한다.

 

  • [구성 속성] > [C/C++] > [코드 생성] > [런타임 라이브러리] > [다중 스레드 디버그 DLL(/MDd)] 일 때, MFC 프로젝트에서 오류가 발생하지 않고 잘 컴파일된다. [다중 스레드 디버그(/MTd)]로 설정하면 오류가 발생한다.

 

 

6. 아래는 MFC 프로젝트에서 libpqxx를 사용하려고 할 때 발생하는 오류이다.

 

  • #include를 다 안해주었기 때문에 생기는 오류이다. 아래 #include 목록 중에서 필요한 것을 포함시킨다.

libpqxx 오류 내용1

 

  • #include 목록
#include <afxmt.h>
#include <iostream>
#include <pqxx/pqxx>
#include <cstring>
#include <stdio.h>
#include <WinSock2.h>
#include <ws2ipdef.h>
#include <WS2tcpip.h>
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <string>
#include <sys/types.h>
#include <cstdio>
#include <cstdlib>
#include <sys/timeb.h>
#include <ctime>
#include <chrono>

 

  • 여기에서 <afxmt.h>는 가장 상단에 위치시켜야 한다. 그렇지 않으면 아래와 같은 오류가 발생한다.

libpqxx 오류 내용2

 

 


 

  • 우리의 MFC 프로젝트가 [동적 라이브러리 사용] 및 [다중 스레드 디버그 DLL(/MDd)] 이여야 PostgreSQL 라이브러리를 사용할 수 있다.
libpqxx 빌드 프로그램 우리의 MFC 프로젝트
정적 동적, /MDd 불가능
표준 동적, /MDd 가능
동적 동적, /MDd 가능

 

 


 

 

7. 혹시나 모르니 다음 속성들이 맞춰져 있는지 확인한다.

 

  • [구성 속성] > [디버깅] > [환경] > [PATH=$(ProjectDir)\bin;%PATH%;]

속성페이지 디버깅 환경변수

 

  • [구성 속성] > [C/C++] > [추가 포함 디렉터리] > [(YourProjectDir)\includes;$(ProjectDir)\includes;]

속성페이지 C/C++ 추가 포함 디렉터리

 

  • [구성 속성] > [링커] > [추가 라이브러리 디렉터리] > [$(ProjectDir)\lib;]

속성페이지 링커 추가 라이브러리 디렉터리

 

  • [구성 속성] > [링커] > [입력] > [추가 종속성] > [$(ProjectDir)\includes\pqxx\pqxx.lib;$(ProjectDir)\includes\pqxx\libpq.lib]

속성페이지 링커 입력 추가 종속성

 

 

* 결론 : PostgreSQL을 x86 MFC에서 이용하기 위해서는 PostgreSQL 10 버전 이하를 이용해야 하고, 동적 라이브러리 사용 및 다중 스레드 디버그 DLL (/MDd) 이여야 한다.

 

 

 

 

반응형

댓글