用いてプログラミングをしているが、リンクエラーを生じさせてしまって、時間を無駄にすることが多い。失敗の記録を示すことで同じ失敗を避けたいと思う。可能性:文字コードの扱いが一貫していない。Library]の扱いが一貫していない。可能性:リンクするライブラリのディレクトリが指定されていない。可能性:リンクする設定のlibファイルがまだ用意されていない。可能性:設定に異なる版のコンパイラがかかわっている可能性これらのパターンは、実際にはまったことのあるパターンです。以下これらの可能性について述べます。・可能性:文字コードの扱いが一貫していない。2013の場合、文字コードの指定を行わなくてはならない。set]でどちらか一方を一貫性のあるように設定する。するとvcxprojファイルの中にUnicodeを使う設定が反映される。2013用のCMakeLists.txtの場合、以下の行を追記する。add_definitions(-D_UNICODE)この結果vcxprojには次のようにunicodeを使う設定が反映される。<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_UNICODE;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>スクリプトによる文字コード設定の確認エディタで複数のファイルをチェックするのは手間なので、スクリプト言語でツールを作ってみた。(例はpythonで書いているけれども、grepコマンドなど好きなものを使えばよい。Studioの設定ファイル*.vxcprojから文字コードの設定を見るツール。<CharacterSet>MultiByte</CharacterSet>この例では、ZERO_CHECK.vcxprojの文字コード設定が他と違ってMultiByteになっていることがわかる。Library]の扱いが一貫していない。Libraryの設定がつじつまがとれていないことを示している。'MDd_DynamicDebug自作ライブラリがlibであってDLL化していない場合とか、まずは静的リンクを使う場合を用いてみる。(/MDd)これらの設定の意味はMicrosoftサイトに詳しくに書いてある。Library]から設定する。*.vcxprojとすれば、静的リンクなのかDLLによるリンクなのか、DebugモードReleaseモードでの設定が適切になっているかどうかをチェックしやすい。・可能性:リンクするライブラリのディレクトリが指定されていない。統合環境中で構文の解釈に成功するようになっても、リンカはその対応するlibファイルの所在など知りようがないから、教えてやる必要があります。Files\boost_1_58_0\stage\libであることなど、リンカには知りようがない。Studioでプロジェクトの設定を個別に設定する。Directories]の値を設定する。"libファイル名")を記述します。この方法はときどき見かけます。利点:C++のソースコード中に明示的記述できるので、vcxprojファイルを変数するよりも共有しやすいことです。難点:次のOpenCVの例に見るように、マイナーバージョンまで含めて記述してしまうということ。Debugモードとそれ以外とで記述を変えなくてはならない点です。"opencv_core2410.lib")#endifCMakeのCMakeLists.txtではlink_directories()で追加するリンク対象のライブラリがあるpathを指定する。.pcxprojファイルの中に次のタグで値が設定される。・可能性:リンクする設定のlibファイルがまだ用意されていない。64bitなどによって、ライブラリの組み合わせは変わってくる。そのため必要な組み合わせのlibが、対応するディレクトリにない場合がある。その場合には、対応するlibを追加でビルドする。ビット版をビルド・可能性:コピーした設定で間違った依存性・設定になっている可能性.vcxprojファイルで設定している項目のpathが絶対パスで書かれている場合、その設定がコピー先の設定ではなく、コピー元のファイルを参照している可能性が高い。そのため、直したつもりの設定と、実際に有効になっているコピー元の設定とがかみ合っていなくて、リンクエラーを生じていることもありうる。Explorerで疑わしいファイルをいったん外して、適切なファイルを再度含めなおすとよい。vcxprojファイルをエディタでチェックする*.vcxprojファイルは、XML形式で書かれたテキストファイルだから、エディタで検索してみること。SVNで管理している場合、変更の差分をWinMergeなどを使って表示させると、何がどうなっているかがわかる。いうエラーを見たことがあるだろうか?もし見たことがある場合には、リンクするライブラリを現在使用中のコンパイラのバージョンに対応したものを使うこと。Studioのバージョンを常に意識する必要がある。例を挙げれば、boost_1_58_0\stage\libの下にあるlibファイルはファイル名の一部にlibファイルを生成したコンパイラを示すvc120の記述がある。libboost_filesystem-vc120-mt-1_58.libまた、OpenCVの配布の中にあるprecompileのライブラリにも、VCのバージョンごとに異なったファイル構成がある。HDDから削除しておくとよい。ディレクトリのpathが入っていたりする。プロジェクトの設定ファイルの隅から隅までチェックするのが必要なことになってしまっている。・言語仕様にしたがって書かれたC++のプログラムは、OSが共通であれば、使用するコンパイラやリンカに依存しないのが、期待したいところだが、実際にはそうなっていない。このことは、VisualStudioのバージョンがあがったときには、また、リンカやプリプロセッサの設定に互換性が失われることを意味する。'python27_d.lib'のようなが状況のときには、以下のリンクを参考にしてください。*.dllから見つかりませんでした。」linkした際の情報からすると、該当のdllに所定の関数もしくはメソッドがあると期待されるのにそれが見つからないことを意味するらしい。目的のdllファイルそうすると、目的のdllファイルのシンボルが表示されるので、どのシンボルでリンクエラーを生じたのかを確認できる。このときの結果では、dllを生じさせた私家版のソースは、ヘッダファイルと矛盾をきたしていたものだった。ポイントの上記のエラーを生じた際には、ヘッダファイルとDLLとの不整合を生じていないか確認しよう。OpenCV使いです。upLoginユーザーは見つかりませんでした。