Gdi32.lib
とリンクするプロジェクトの設定を変更する必要があります。
ヘッダーファイルにリンクすることはできません。ヘッダーのみのライブラリの場合は、何もリンクする必要はありません。ヘッダーファイルをインクルードし、定義されている関数は直接コンパイルされます。それはCImgの場合と思われる。ドキュメントには、単一のヘッダーファイルのみで構成される自己完結型のテンプレートライブラリが記載されています。だから、本当に、あなたがする必要があるのはそれを含めることだけです。あなたはレースに出ます。
解決されていない外部シンボルのエラーは、他の場所から発生しています。エラーメッセージを読んで、関数名を見てどこを参照する必要があります。
ヒントのカップル:
__imp_
接頭辞を使用すると、Windows API関数を見ていることを示唆しています。
- これがわからない場合は、接頭辞と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
という名前です)。
可能な重複:[未解決のシンボルとは何か...](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-ハウツー・アイ・フィックス) –
MSVC(コンパイラ)にライブラリとリンクするように指示する必要があります。私はVSで、それはプロジェクトの設定メニューを介して行われたと思います。ライブラリを使用する背後にあるアイデアは、(A)ヘッダーファイルを挿入し、(B)DLLをリンクすることです。それらはビルドプロセスの2つの異なる段階でコンパイラの別々の部分で使用されます。 – iksemyonov
しかし、リンク先のCImgライブラリにはヘッダファイル以外はありません。 – Prakhar