반응형
MFC 상에서 Git Hub에 올려있는 여러 라이브러리를 함께 사용하려고 할 때 발생하는 문제점을 해결할 수 있는 방법을 소개한다.
CMake GUI를 이용한 방법이기 때문에 아래 포스팅에서 사용한 코드를 가지고 진행했다.
https://namsaenga.tistory.com/25
[문제 1]
- 예제로 작성했던 redis 코드(x64)를 기존 프로그램(x86)에 통합할 때 [LNK4272 : ‘x86’ 라이브러리 컴퓨터 종류가 ‘x64’ 대상 컴퓨터 종류와 충돌합니다.] 경고 및 여러 오류가 나타났다.
[문제 2]
- 문제 1을 해결하기 위하여, CMake GUI로 Win32 빌드 프로그램 생성 및 Win32 프로젝트 빌드를 수행한 후, 다시 기존 프로그램과 통합 및 빌드를 수행하면 다음과 같은 오류가 발생한다.
a. [오류 1]
- MDd 런타임 라이브러리로 속성이 맞춰진 프로젝트에 Mtd 런타임 라이브러리를 사용하려고 할 때 발생하는 문제이다.
b. [오류 2]
- _AFxDLL 빌드를 위해 [프로젝트 속성] > [구성 속성] > [C/C++] > [코드 생성] > [런타임 라이브러리] > [다중 스레드 DLL(/MD)]로 변경하라는 말이다.
- 다중 스레드 DLL(/MD)로 변경하고 다시 빌드를 하면 오류 1 현상이 또 나타난다.
* 위의 두 오류를 해결하기 위해 프로젝트 속성을 계속 변경했지만 계속 비슷한 오류가 반복되었다. 각 프로그램의 프로젝트 속성을 고려한 Win32 빌드 프로그램 생성 및 Win32 프로젝트 빌드를 수행했더니 문제가 해결되었다.
<프로젝트 속성>
redis 코드(x64)
- MFC 사용 : 공유 DLL에서 MFC 사용
- 런타임 라이브러리 : 다중 스레드 디버그 DLL(/MDd)
기존 프로그램(Win32)
- MFC 사용 : 정적 라이브러리에서 MFC 사용
- 런타임 라이브러리 : 다중 스레드 디버그(/MTd)
<해결방법>
1. tacopie.sln 빌드
- tacopie.sln을 열어 [프로젝트 속성] > [구성 관리자] > [플랫폼] > [Win32]로 설정한다.
- [프로젝트 속성] > [구성 속성] > [고급] > [MFC 사용] > [표준 Windows 라이브러리 사용]을 [정적 라이브러리에서 MFC 사용]으로 변경한다.
- [프로젝트 속성] > [구성 속성] > [C/C++] > [코드 생성] > [런타임 라이브러리] > [다중 스레드 디버그(/MTd)]로 변경한다.
- tacopie 프로젝트를 빌드한다.
2. CMake GUI 설정
- CMake GUI를 관리자 권한으로 실행한 후에 [Where is the source code] 및 [Where to build the binaries] 경로를 설정하고 [Configure] > [Optional Platform for Generator] > [Win32]로 설정한 후에 나머지 값들을 설정한다. 참고로 나의 설정 값은 아래와 같다. 설정이 끝났으면 [Generate] > [Open Project]를 선택한다.
항목 | 경로 |
[Where is the source code] | C:\Users\SIU\Downloads\cpp_redis-master\cpp_redis-master |
[Where to build the binaries] | C:\Users\SIU\Downloads\cpp_redis-master\cpp_redis-master\build |
[CMAKE_CONFIGURATION_TYPES] | Debug;Release;MinSizeRel;RelWithDebInfo |
[CMAKE_INSTALL_PREFIX] | C:\Users\SIU\Desktop\temp\cpp_redis |
[TACOPIE_INCLUDE_DIR] | C:\Users\SIU\Downloads\tacopie\tacopie\includes |
[TACOPIE_LIBRARY] |
C:\Users\SIU\Downloads\tacopie\tacopie\msvc15\Win32\Debug\tacopie.lib |
3. cpp_redis.sln 빌드
- CMake GUI에서 [Open Project]를 선택하면 아래 경로의 솔루션이 열린다.
C:\Users\SIU\Downloads\cpp_redis-master\cpp_redis-master\build\cpp_redis.sln
1) ALL_BUILD 프로젝트 속성 변경 후 빌드
- [ALL_BUILD 속성 페이지] > [구성 속성] > [고급] > [기본 설정 빌드 도구 아키텍처] > [64비트(x64)]를 [32비트(x86)]으로 바꿔준다
- [ALL_BUILD 속성 페이지] > [구성 속성] > [고급] > [MFC 사용] > [표준 Windows 라이브러리 사용]을 [정적 라이브러리에서 MFC 사용]으로 바꿔준다.
- 두 가지 속성 값을 변경하였으면 프로젝트 빌드를 해준다.
2) INSTALL 프로젝트 속성 변경 후 빌드
- ALL_BUILD 프로젝트와 같은 방법으로 속성 값을 바꾼 후에 빌드한다.
* 결론: MFC 상에서 서로 다른 라이브러리를 통합하여 사용할 경우에는 “플랫폼”이 x86인지 x64인지 뿐만 아니라 “MFC 사용” 및 “런타임 라이브러리” 종류도 일치하게 환경을 구성해줘야 하는 것을 깨달았다.
반응형
'프로그래밍 > MFC' 카테고리의 다른 글
x86 MFC에서 PostgreSQL 사용하기 (0) | 2022.04.03 |
---|---|
MFC에서 TimescaleDB 사용하기 (0) | 2022.04.03 |
댓글