MATLABからC++への変数の引き渡しに対するエラーの解消方法を調べています
1 view (last 30 days)
Show older comments
上記の「C++へのMATLAB計算結果の取り込み」と同様のコードをC++で記述して、Visualstudio2019でビルドを行いましたが、
ヘッダーファイル「ArrayFactorry.hpp」内の168,195,534.606行目において「C2760 構文エラー:予期しないトークン’識別子’必要なトークン’式’」
のエラーが4カ所発生し、コンパイラが現在できない状況です。
エラーが発生している箇所の記述を以下に示します。(エラー発生個所を下線で示します)
167 typedef int (*CreateArrayWithDimsAndDataFcnPtr)(
168 impl::ArrayFactoryImpl * impl, int arraytype , size_t* dims, size_t numDims,
169 const void* const dataStart, size_t numEl, impl::ArrayImpl**);
~(省略)~
193 typename std::enable_if<std::is_arithmetic<T>::value, TypedArray<T>>::type createScalar(
194 const T val) {
195 typedef int (*CreateScalarArrayFcnPtr)(impl::ArrayFactoryImpl * impl, int arrayType,
196 const void* data, impl::ArrayImpl**);
~(省略)~
533 typedef int (*CreateArrayFromBufferV2FcnPtr)(
534 impl::ArrayFactoryImpl * impl, int arrayType, size_t* dims, size_t numDims,
535 void* buffer, void (*deleter)(void*), impl::ArrayImpl**, int memoryLayout);
~(省略)~
605 typedef int (*CreateSparseArrayFromBufferFcnPtr)(
606 impl::ArrayFactoryImpl * impl, int arrayType, size_t* dims, size_t numDims, size_t nnz,
607 void* dataBuffer, void (*dataDeleter)(void*), size_t* rowsBuffer,
608 void (*rowsDeleter)(void*), size_t* colsBuffer, void (*colsDeleter)(void*),
609 impl::ArrayImpl**);
コンパイラに必要と思われるヘッダーファイルを所有しているMATLABファイルからコピーして参照しております。
〇参照しているヘッダーファイル一覧
・「MatlabDataArray」フォルダ内
・「MatlabEngine」フォルダ内
・「MatlabExecutionInterface」フォルダ内
・MatlabDataArray.hpp
・MatlabEngine.hpp
・MatlabExecutionInterface.hpp
エラーの解決方法として調査したところVisualStudio内のプロパティの「C/C++」⇒「言語」⇒「準拠モード」⇒「いいえ」にする
ことで解決した報告を確認したため、同様の方法で設定しビルドを行ってみたところC2760のエラーはなくなりましたが
「LNK2019 未解決の外部シンボル __imp__cpp_engine_create_session が関数 "void __cdecl `anonymous namespace'::initSession(void)" (?initSession@?A0x352e24b4@@YAXXZ) で参照されました。」
のエラーが15件新たに発生しました。
こちらについてもエラー解決方法の調査を行っておりますが、上記ヘッダーファイルで不足しているファイルまたは設定事項があり、
ビルドができないためと考えております。
つきましてはこのエラーを解消しビルドが可能となる方法をご教授いただけないでしょうか?
よろしくお願い申し上げます。
0 Comments
Answers (1)
Kojiro Saito
on 15 Sep 2020
・プラットフォームの設定を「x64」にする
・プロジェクトのプロパティを開いて、「C/C++」→「全般」→「追加のインクルードディレクトリ」に「MATLAB_ROOT\extern\include」 (例:C:\Program Files\MATLAB\R2020a\extern\include) を追加
・「リンカー」の「追加のライブラリディレクトリ」に「MATLAB_ROOT\extern\lib\win64\microsoft」 (例:C:\Program Files\MATLAB\R2020a\extern\lib\win64\microsoft) を追加
・「リンカー」→「入力」で「追加の依存ファイル」に「libMatlabEngine.lib」と「libMatlabDataArray.lib」を追加
・環境変数Pathに「matlabroot\extern\bin\win64」(例:C:\Program Files\MATLAB\R2020a\extern\bin\win64)を追加
でビルドが通るようになります。
0 Comments
See Also
Categories
Find more on MATLAB データ API in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!