dllファイルの動かない問題

MATLABに学習した結果(ネットワーク)を保存してC++共有ライブラリファイルを作って他のC++プログラムに連動しています。
でも、Win10とVisualStudio2015が設定してあるパソコン2台から同一な”.Mat”ファイルを使ってdllファイルを作る場合、dllファイルが動かない現象が発生しています。
例えば、
パソコン1(Win10、VisualStudio2015、2018b)、日本語版:C++用DLLファイル作成 → 他のプログラムに連動可能
パソコン2(Win10、VisualStudio2015、2018b)、韓国語版:C++用DLLファイル作成 → 他のプログラムに連動不可(DLLの初期化が失敗)
上記事項についてなんか他の確認が必要な事項がありますか。

2 Comments

Kojiro Saito
Kojiro Saito on 17 Sep 2019
DLLの初期化失敗のエラーメッセージを教えていただけますか?
WAN PYO HONG
WAN PYO HONG on 17 Sep 2019
ご確認ありがとうございます。
MALABに作成したDLLはVisualStudio2015 Professionalsに連動が必要な状況です。
VisualStudioから発生しているエラーは
LNK2019 未解決の外部シンボル "__declspec(dllimport) void __cdecl DL_TEST(int,class mwArray &,class mwArray &,class mwArray const &,class mwArray const &,class mwArray const &)" (__imp_?DL_TEST@@YAXHAEAVmwArray@@0AEBV1@11@Z) が関数 "protected: virtual int __cdecl CGetTestVCDlg::OnInitDialog(void)" (?OnInitDialog@CGetTestVCDlg@@MEAAHXZ) で参照されました。。。
上記のVisualStudioから出てあるエラーですけれども

Sign in to comment.

Answers (1)

Kojiro Saito
Kojiro Saito on 17 Sep 2019

0 votes

LNK2019のエラーなので以下2点が考えられます。
(1)ソリューションのプラットフォーム
Visual Studioでソリューションのプラットフォームがx64になっていますでしょうか?
visualstudio_platform.png
(2)追加の依存ファイル
こちらのAnswerのように、追加の依存ファイルの設定が漏れている可能性があります。
「プロジェクト」 -> 「プロパティ」 -> 「リンカ」 -> 「入力」 -> 「追加の依存ファイル」にmclmcrrt.libが追加されていますでしょうか?

7 Comments

WAN PYO HONG
WAN PYO HONG on 17 Sep 2019
上記、二つの事項はすべて設定されています。
同一な環境のパソコンが2台あるんだけど、パソコン1から作成したDLLは正常動作し、
他のパソコンから作成したDLLはエラーが発生しています。
mex -setup c++
Microsoft Visual C++ 2015 Professional (C)
を入力してCompilerも設定しました。
原因を全然知らない状況です。
Kojiro Saito
Kojiro Saito on 17 Sep 2019
パソコン1で作成したVisual Studioのソリューションファイルとファイル一式をパソコン2にコピーして、パソコン2でVisual Studioでソリューションファイルを開いても同じエラーが出ますでしょうか?
WAN PYO HONG
WAN PYO HONG on 18 Sep 2019
(現在情報)
1.パソコン1で作成したDLL→C++で連動可能
2.パソコン1で作成したDLL→C++で連動不可能
(パソコン1のソリューションをパソコン2にコピー)
1.パソコン1で作成したDLL→パソコン2に適用:連動可能
2.パソコン2で作成したDLL→パソコン2に適用;連動不可(同じエラー発生)
今、上記の状況です。
恐らく、別途にC++に関してPatchとかアップデートが必要ことがありますか
Kojiro Saito
Kojiro Saito on 18 Sep 2019
了解しました。同じエラーが出るということは、パソコン2のソリューションファイルが問題ではないですね。
dllの問題なのか、パソコンの環境の問題なのかを切り分けるのに、以下を試していただけますか?
  1. PC1で作成したdllをPC2にコピーして、PC2で適用 (dllを差し替え)
  2. PC2で作成したdllをPC1にコピーして、PC1で適用 (dllを差し替え)
WAN PYO HONG
WAN PYO HONG on 18 Sep 2019
Edited: WAN PYO HONG on 18 Sep 2019
ご確認ありがとうございます。
(結果について)
1.PC1で作成したdllをPC2にコピーして、PC2で適用 (dllを差し替え)→動作可能
2.PC2で作成したdllをPC1にコピーして、PC1で適用 (dllを差し替え)→動作不可
上記2番の場合、ビルドする時に(LNK2019)エラーが発生してビルドができなかったです。
追加でテストした内容としては
2番の場合、ビルド完了しました。でも、MATLABの変数を呼出するとき、mclmcr.dllの記号がロードしないとエラーが出ました。
今回はDLL作成した時、Build CompilerをC++に変わりました。
mclmcr.dllについてなんか設定することがありますか。
Kojiro Saito
Kojiro Saito on 19 Sep 2019
mclmcr.dllはMATLAB_RuntimeまたはMATLABのbin\win64フォルダーにあります。ファイルが存在しているか確認して、もし存在していなかったらインストールが失敗している可能性があるのでMATLAB Runtimeの再インストールが必要となります。
また、他のソフトウェアでmclmcr.dllと同じ名前のライブラリを使ってファイル競合が起きている場合もあるので、その場合は環境変数PathでMATLAB Runtimeのパスを一番上に持ってきてみてください。
WAN PYO HONG
WAN PYO HONG on 24 Sep 2019
上記の設定にも得意事項がないです。
もっと確認します。
ご対応ありがとうございます。

Sign in to comment.

Products

Release

R2018b

Asked:

on 17 Sep 2019

Commented:

on 24 Sep 2019

Community Treasure Hunt

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

Start Hunting!