2013-04-24 2 views
8

이미지 라이브러리가 필요하며 FreeImage, http://freeimage.sourceforge.net/을 조사했습니다. 응용 프로그램과 정적으로 링크하고 싶습니다.VS2010에서 FreeImage를 정적 라이브러리로 연결 하시겠습니까?

바이너리를 다운로드하여 연결하려고했지만 해당 함수를 호출하려고 할 때 2019 링커 오류가 발생합니다. 올바른 연결인데도 불구하고 말입니다.

그런 다음 소스를 다운로드하고 "FreeImageLib.2008"을 VS2010으로 변환하여 빌드했습니다. 그것은 자체적으로 잘 만들지 만 링커 오류를 사용하는 내 응용 프로그램은 여전히 ​​링커 오류에 대해 불만을 토로 할 때 동일한 문제가 있습니다.

나는 또한 내 다른 프로젝트와 일치하는 모든 프로젝트 구성을 설정, 그래서 등/MDD 또는/MTD와 충돌이없는 ..

나는 그들의 소스의 뒷조사를하고 FREEIMAGE_LIB "와 같은 매크로가있다 "이것은 정적 라이브러리를 만들 때 정의되어야 함을 의미하며 정의되어 있지만 여전히 작동하지는 않습니다.

저는 인터넷 검색을 통해이 문제에 대한 확실한 답변을 찾을 수 없습니다. Getting FreeImage to work with Visual Studio 2010에 대한 답은 아무런 차이가 없습니다. 이미 헤더를 포함하거나 전 처리기 인수로 매크로를 정의했지만 작업을하지는 않습니다.

이 라이브러리는 정적 라이브러리로 사용하지 않습니까, 아니면 문제가 될 수 있습니까? FreeImage를 정적으로 VS2010 +에 연결할 수 있습니까?

감사

답변

11

예, 여러 비주얼 스튜디오 버전에 정적으로 FreeImage를 링크 할 수있었습니다. 여기서 나는 이것을 어떻게 일반적으로하는지 설명한다. FreeImage와

, 기본적으로, 우리는 당신의 응용 프로그램에 연결하는 8 가지 옵션이 있습니다 :

FreeImage - 동적 링크를 (당신은 DLL을해야합니다).

FreeImageLib - 정적 링크.

이들 각각은 "디버그"또는 "릴리스"구성 및 Win32 또는 Win64 플랫폼 용으로 빌드 할 수 있습니다.

그래서, 우리는 (정적 & &는 Win32 & & 디버그) 및 (정적 & &는 Win32 & & 출시) 우리의 응용 프로그램에 대한 변종 필요가 있다고 가정합니다. 또한 우리의 응용 프로그램에서 우리는 우리가 일반적으로 그것을 가지고 어떻게 동적 런타임 라이브러리 (기본적으로는, FreeImage 어떤 이유로 정적에 대한 설정) 사용

  • 다운로드와 신선한 버전을 압축 해제 (또는 적어도 오래된 distib을 정리)

  • 열기 FreeImage.2008.sln Shift + 클릭으로 10 개의 프로젝트를 모두 선택하십시오. 그런 다음 "프로젝트 등록 정보/C++/코드 생성"에서 "디버그"구성의 경우/MDd를 선택하고 "릴리스"의 경우/MD를 선택합니다.

    FreeImageLib | Debug | Win32

    FreeImageLib | Release | Win32

을하고 "빌드"

  • 그런 다음 우리는 "메뉴// 배치 빌드를 구축"로 이동을 선택합니다.

    • 선택된 구성 대기. 우리가 필요한 모든 FreeImage\Dist 폴더 확인 파일에 FreeImage\Dist 폴더

    • 복사됩니다 delete.me FreeImage.h FreeImage.lib FreeImaged.lib 확인 생성 날짜와 시간을. 신선한 구운 뜨거운 있어야합니다. 그렇지 않은 경우 FreeImage\Source\FreeImageLib\DebugFreeImage\Source\FreeImageLib\Release에서 복사하십시오.

    • 주 응용 프로그램에 포함 및 라이브러리 FreeImage\Dist에 추가하고 디버그 구성에 FreeImaged.lib, 릴리스에 FreeImage.lib을 연결하십시오.
    • 은 소스 파일에 포함 :

      #define FREEIMAGE_LIB

      #include "FreeImage.h"

    • 시도가 FreeImage_Initialise(); FreeImage_DeInitialise();

    • 를 호출 그것은 작동합니다

    해피 코딩!

  • +0

    나를 위해 일했습니다. 다른 사람들 (Magick ++, OIIO) 중에서도 FreeImage가 가장 쉽습니다. – pelesl