2016-07-22 59 views
1

画像処理タスクの一部としてCImgライブラリを使用しようとしています。 VS 2012Windows 7 x64を使用して、にプロジェクトを構築しています。アプリケーションに必要なDLLを作成しています。ライブラリから唯一のヘッダファイルCImg.hを含めました。しかし、CImgオブジェクトを初期化するとすぐに、未解決の外部シンボルエラーが発生します。 1つのサンプルエラーは次のとおりです。CImgライブラリを使用中に未解決の外部シンボルエラー

layer.obj : error LNK2019: unresolved external symbol __imp_SetDIBitsToDevice referenced in function "public: struct cimg_library::CImgDisplay & __cdecl cimg_library::CImgDisplay::paint(void)" ([email protected]@[email protected]@[email protected]) 

私は間違っていると私はそれを修正する方法を教えてください? (私はC++の用語については初心者です)

+0

可能な重複:[未解決のシンボルとは何か...](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-ハウツー・アイ・フィックス) –

+0

MSVC(コンパイラ)にライブラリとリンクするように指示する必要があります。私はVSで、それはプロジェクトの設定メニューを介して行われたと思います。ライブラリを使用する背後にあるアイデアは、(A)ヘッダーファイルを挿入し、(B)DLLをリンクすることです。それらはビルドプロセスの2つの異なる段階でコンパイラの別々の部分で使用されます。 – iksemyonov

+0

しかし、リンク先のCImgライブラリにはヘッダファイル以外はありません。 – Prakhar

答えて

3

Gdi32.lib

とリンクするプロジェクトの設定を変更する必要があります。

ヘッダーファイルにリンクすることはできません。ヘッダーのみのライブラリの場合は、何もリンクする必要はありません。ヘッダーファイルをインクルードし、定義されている関数は直接コンパイルされます。それはCImgの場合と思われる。ドキュメントには、単一のヘッダーファイルのみで構成される自己完結型のテンプレートライブラリが記載されています。だから、本当に、あなたがする必要があるのはそれを含めることだけです。あなたはレースに出ます。

解決されていない外部シンボルのエラーは、他の場所から発生しています。エラーメッセージを読んで、関数名を見てどこを参照する必要があります。

ヒントのカップル:

  1. __imp_接頭辞を使用すると、Windows API関数を見ていることを示唆しています。
  2. これがわからない場合は、接頭辞とGoogleの名前のうち読める部分を無視することができます(この場合はSetDIBitsToDevice)。チャンスは非常に良いです。あなたは正しい方向にあなたを指し示すドキュメンテーションか少なくとも何かを上げるでしょう。

実際、この場合、SetDIBitsToDevice関数のMicrosoftのSDKドキュメントが表示されます。それはWindows API関数であり、Microsoftのドキュメントは、それを消費するためにリンクする必要があるライブラリを常に示しています。ページの一番下を見てください:

ヘッダー:WINGDI.H(はWindows.hを含め)
ライブラリ:Gdi32.lib
DLL:GDI32.DLL

CImgライブラリヘッダーファイルには明らかにWindows.hヘッダーファイルが含まれているか、コンパイル時エラーが発生しています。リンカーにエラーが発生しました。つまり、リンカーにGdi32.libライブラリにリンクするように指示していません。これはGDI関数を呼び出すことができるものです。 Gdi32.dllからエクスポートされた関数を呼び出すことを容易にするスタブです。

一般に、Windowsアプリケーションを構築するときは、少なくともkernel32.lib,user32.lib、およびgdi32.libとリンクしたいと思うでしょう。

This questionには、未定義のシンボルエラーを処理する方法と、リンカーを設定する方法の詳細が記載されています。 Visual Studioで、プロジェクトのプロパティに移動します→ C/C++ →リンカー→入力→追加の依存関係。または、#pragma comment(lib, "gdi32.lib")をソースファイルに追加します(プリコンパイルされたヘッダーは普通はStdAfx.hという名前です)。

+0

それは非常に意味があります。どうもありがとうございます! – Prakhar

関連する問題