Microsoft Visual C++を使用してコン​パイルを行うと、リン​クエラー(LNK20​19)となるのはなぜ​ですか?

131 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2010 年 8 月 4 日
MATLAB Compilerを使用して共有ライブラリ"libmatrixp.dll"を作成しました。このライブラリを使用するアプリケーション"matrixdriver.cpp"をMicrosoft Visual C++ 2005 で作成していますが、リンクやインクルードのパスの設定を行ったにもかかわらず、このアプリケーションのコンパイルを行うと以下のようなエラーとなります。
1>------ Build started: Project: matrixtest, Configuration: Debug Win32------
1>Compiling...
1>matrixdriver.cpp
1>Compiling manifest to resources...
1>Linking...
1>matrixdriver.obj : error LNK2019: unresolved external symbol
_mclTerminateApplication referenced in function
__catch$?run_main@@YAPAXPAX@Z$0
1>matrixdriver.obj : error LNK2019: unresolved external symbol
_libmatrixpTerminate referenced in function
__catch$?run_main@@YAPAXPAX@Z$0
1>matrixdriver.obj : error LNK2019: unresolved external symbol
"__declspec(dllimport) void __cdecl eigmatrix(int,class mwArray &,class
mwArray const &)" (__imp_?eigmatrix@@YAXHAAVmwArray@@ABV1@@Z) referenced
in function "void * __cdecl run_main(void *)" (?run_main@@YAPAXPAX@Z)
1>matrixdriver.obj : error LNK2019: unresolved external symbol
"__declspec(dllimport) void __cdecl multiplymatrix(int,class mwArray
&,class mwArray const &,class mwArray const &)"
(__imp_?multiplymatrix@@YAXHAAVmwArray@@ABV1@1@Z) referenced in function
"void * __cdecl run_main(void *)" (?run_main@@YAPAXPAX@Z)
1>matrixdriver.obj : error LNK2019: unresolved external symbol
"__declspec(dllimport) void __cdecl addmatrix(int,class mwArray &,class
mwArray const &,class mwArray const &)"
(__imp_?addmatrix@@YAXHAAVmwArray@@ABV1@1@Z) referenced in function
"void * __cdecl run_main(void *)" (?run_main@@YAPAXPAX@Z)
1>matrixdriver.obj : error LNK2019: unresolved external symbol
_libmatrixpInitialize referenced in function "void * __cdecl
run_main(void *)" (?run_main@@YAPAXPAX@Z)
1>matrixdriver.obj : error LNK2019: unresolved external symbol
_mclInitializeApplication referenced in function "void * __cdecl
run_main(void *)" (?run_main@@YAPAXPAX@Z)

採用された回答

MathWorks Support Team
MathWorks Support Team 2010 年 8 月 4 日
これはリンクエラーが原因です。コンパイラがアプリケーションと全てのシンボルが定義されている適切なライブラリとのリンクエラーが原因となり、これらのライブラリファイルとのパスの設定が不足しています。全てのシンボルを解決するにはVisual Studioのプロジェクトに、これらのパスをマニュアルで追加する必要があります。
要求されるライブラリをインクルードさせるためには、
"プロジェクト -> プロパティ -> リンカ -> 入力 -> 追加の依存ファイル"に関連するファイルを追加します。たとえば、mclmcrrt.lib, mclmcr.lib, libmatrixp.lib などを追加することになります。
このようなリンクエラーとなった場合、解決されていない関数を確認し、それがそのライブラリに属しているかを探します。そして上記の方法によりリンカのリストにライブラリを追加します。関数を特定するには、mclTerminateApplicationなどのソースコードを確認します。次に、関数上で右クリックしてから"Go To Definition"を選択します。もし、全てのパスの設定が確実にセットされている場合、"mclmcrrt.h"ファイルが開かれます。これは、"mclmcrrt.lib"をリンカのリストに追加すべきであることを表しています。
もし、MBUILD 関数によるコンパイルを行っていて、このエラーとなる場合は、上記の説明の要領で、見つからないシンボルを含むライブラリの特定を行い、MBUILD 関数実行時にライブラリファイルを追加してコンパイルしてください。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeC++ 共有ライブラリの統合 についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!