コンパイル/実行時の
トラブルについて
MIDACOのコンパイルや実行時に起こりうる問題について説明します。
MIDACOに関する一般的なご質問についてはFAQをご覧ください。
質問:MIDACOが返すIFLAGエラーメッセージは何ですか?
▼
答え:IFLAGメッセージのくわしいリストはこちら▷をご参照ください。
質問:実行中にMIDACO_SOLUTION.TXTファイルが開けないのですが?
▼
答え:Windowsユーザーの場合、MIDACO実行中に、MIDACO_SCREEN.TXT、MIDACO_SOLUTION.TXT、MIDACO_HISTORY.TXTのテキスト出力ファイルに(Windowsのファイル管理のため)アクセスできないという問題が発生する場合があります。簡単な対処法として、これらのファイルをコピーして、そのコピーを開く方法があります。
質問:「MIDACO_SCREEN.TXT」と「MIDACO_SOLUTION.TXT」が正しく表示されないのですが?
▼
答え:一部のケース(たとえばMatlab-Windows)で「MIDACO_SCREEN.TXT」 と 「MIDACO_SOLUTION.TXT」がシンプルなエディタ(メモ帳など)で正しく表示されないことがあります。この問題を避けるため、他のエディタ(Sublime、Atom、Notepad++、Matlab エディターなど)で txt ファイルを開いてください。
質問:【MacOS警告】ライブラリファイル (midacopy.so) が開けません
▼
答え:
Macユーザーは、MIDACOライブラリファイル(例:midacopy.so)の属性を変更して実行を許可する必要があるかもしれません。これは、そのファイルが悪意のあるソフトウェアか否かをApple側でチェックできないためです。そのため、ターミナルを開き、MIDACOライブラリファイルが保存されている場所に移動して、次のコマンドを実行します。xattr -d com.apple.quarantine midacopy.so
他のプログラミング言語(例:R、Julia、C#)についても、同様のコマンドが有効です。xattr -d com.apple.quarantine midacoR.so
xattr -d com.apple.quarantine midacoJL.so
xattr -d com.apple.quarantine midacocs.so
詳細についてはこちら▷をご覧ください。
質問:【一般的なエラー】セグメンテーション違反(コアダンプ)
▼
答え:この問題は、コンソールのデフォルトのスタックサイズを増やすことで修正できる可能性があります。 Mac/Linuxの場合、以下のコマンドをコンソールで実行してください:ulimit -s unlimited
この問題は、RWやPFの配列サイズが大きすぎる場合や、問題の次元が非常に大きい事例(特に大規模問題)で発生する可能性がありまた。また他にも、MIDACOを並列で実行する際(例:openMPやMPI)に発生することがあります。
C/C++でこの問題を解決する別の方法としては、テンプレートの例で提供されているRW、IW、PF配列用の静的メモリ割り当てではなく、動的(malloc)メモリ割り当てを使用することです。
以下は、動的なワークスペース割り当ての例です。
質問:【Matlabエラー】MEX用C/C++コンパイラが見つかりません
▼
答え:一部のケース(特にWindows 64ビットの場合)では、MatlabはデフォルトのC/C++ MEXコンパイラを提供しません。このような場合、ユーザーがコンパイラを手動でインストールする必要があります。解決策の一つとして、Microsoftが配布する以下の無料C/C++コンパイラ(64ビット)が利用できます。
Microsoft Visual C++ 2010 Redistributable Package (x64)
上記パッケージをダウンロードしてインストールします。その後コンピュータを再起動し、新しいMatlabセッションを開始します。コマンドウィンドウで「mex -setup」と入力します。上記のC/C++コンパイラのインストールが成功していれば、Matlabは自動的にコンパイラを認識し、ユーザーにいくつかのコンパイラオプションメニューを表示します。なお、Matlabでサポートされているmexコンパイラであれば、MIDACOと一緒に使用することができます。さらに読みたい方は「Matlab Search: mex compiler」をご参照ください。
さらに詳しい情報はこちら:Matlab Search: mex compiler ▷
質問:【Matlabエラー】??? 未定義の関数またはメソッド 'midaco'…
▼
答え:このエラーを防ぐため、「midaco.m▼」をダウンロードし、Matlabのパスに含めてください。
質問:【Matlabエラー】??? 未定義の関数またはメソッド 'midacox'…
▼
回答:このエラーは、Matlab が MIDACO mex ファイルを見つけられなかったことを意味します。このエラーを回避するには、C/C++ ソースコードファイル「midacox.c ▶」をダウンロードし、そこからmexファイルを生成します(ファイルを Matlab パスに含めmex midacox.c
と入力して Enter キーを押します)。次に、生成されたmexファイル(例:「midacox.dll」、「midacox.mexw32」、「midacox.mexglx」)がMatlabのパスに含まれていることを確認してください。
質問:【C/C++エラー】undefined reference to 'sqrt'
▼
答え:このエラー(および 'undefined reference to 'pow' や 'undefined reference to 'floor')は、gccでコンパイルする際に数学ライブラリがオブジェクトファイルにリンクされなかった場合に発生します。この問題を解決するには、リンクコマンドの最後にフラグ「-lm」を追加します。たとえば以下を参照してください。gcc -o example.o midaco.o -lm
質問:【C/C++ エラー】'x' was not declared in this scope
▼
回答:このエラー('expected ',' or ';' before 'doublereal' と 'expected unqualified-id before '{' token' も同様)は、'midaco.c' を g++ でコンパイルしようとすると発生します。'midaco.c' ファイルは g++ ではコンパイルできません。しかし、 MIDACO のサンプルファイルはすべて g++ でコンパイルできます(この makefile▼を参照)。そのため、'midaco.c' を gcc(または他の C コンパイラ)でコンパイルすると、この問題は解決します。
このエラーは、プリコンパイル済みヘッダーを使用して MS Visual Studio▶ で 'midaco.c' をコンパイルする場合にも発生することがあります。
質問:【C/C++エラー】LNK2019 (MS Visual Studio)
▼
答え:MS Visual Studioのソリューションをビルドする際に、以下のエラーが表示されることがあります。
「LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました」
このエラーは簡単に修正できます。Visual Studioのプロパティでプロパティ>リンカー>システム>サブシステム を Windows から Console に設定を変更してください。
(/SUBSYSTEM:WINDOWS) ==>変更==> (/SUBSYSTEM:CONSOLE)
質問:【C/C++エラー】fopen (MS Visual Studio)
▼
答え:一部のMS Visual Studioのバージョンでは、fopenコマンドをエラーとして扱い、代わりにfopen_sを使用します。そのため、MS Visual StudioでMIDACOをコンパイルするには、midaco.cソースコードに少し修正を加える必要があります。具体的には、midaco.cファイルの5002行目をコメントアウトし、代わりに5003行目を有効にして、fopenコマンドをfopen_s
に変更します。修正後のコードはこちらです▶
質問:【Makefileエラー】*** No targets specified and no makefile found (ターゲットが指定されておらずmakefile が見つかりません)
▼
答え:「Makefile」をダウンロードする際、ほとんどのウェブブラウザは自動的に拡張子 「.txt」を Makefile に追加します。システム上で「Makefile.txt」を「Makefile」にリネームすることで、この問題は解決するはずです。
質問:【Pythonエラー】 ValueError: Can only assign sequence of same size(同じサイズのシーケンスのみ割り当て可能)
▼
答え:このエラーは、問題の目的関数の数の宣言が、problem_functionサブルーチン内の目的関数の数を含む配列の戻り値の次元と一致しないときに発生します。このエラーを修正するには、目的関数の数(および制約関数の数)がメインファイルと問題関数サブルーチンの両方で正しく設定されていることを確認してください。(なお、制約関数がない問題の場合、"g" 配列はサイズ1のダミー引数であることに注意してください。)
質問:【Octaveエラー】'matlabpool' undefined
▼
答え:MIDACOは並列処理のためにMatlabで「parfor」アプローチを使用していますが、この機能はOctaveでは残念ながら現在(まだ)利用できません。
質問:【Fortranエラー】Silverfrost FTN95でのコンパイル
▼
答え:Silverfrost FTN95 を使用して MIDACO をコンパイルする際に、「midaco.f」ファイルの印刷設定に若干の修正が必要です。具体的には、「midaco.f」ファイルの末尾にある「FLUSH(IOUT)」コマンドをコメントアウトするか削除し、すべての画面印刷の単位を 0 から 5 に変更します。
たとえば、CALL PRINT_LINE(EVAL,TNOW,BESTF,BESTR,0)
を次のように変更します。CALL PRINT_LINE(EVAL,TNOW,BESTF,BESTR,5)
質問:【Fortranエラー】不明なIFLAG値
▼
答え:Fortranには少々厄介なところがあり、多目的問題を解く際に、事前に割り当てられた配列F()のサイズが小さすぎると、不明なIFLAG値やその他の奇妙な報告を受ける場合があります。この問題を解決するには、事前に割り当てられた配列がすべて十分に大きいことを確認してください。
質問:【Juliaエラー】LoadError: error compiling midacoLIB: could not load library
▼
答え:このエラーは、MIDACOライブラリファイル(midacoJL.dll)へのパスが正しく機能していない場合や、誤ったライブラリファイル(32ビットではなく64ビットなど)が使用されている場合に発生することがあります。このエラーを修正するには、正しいバージョンのライブラリファイルが使用されていることを確認し、midaco.jlをテキストエディタで開いて、ファイルの末尾にmidacoJL.dllが保存されているパスを手動で入力してください。
別の方法として、 現在のディレクトリからライブラリファイルをパスを指定せずに読み込むため、以下の短縮パスを入力してください。.\midacoJL.dll
(Windowsの場合) ./midacoJL.dll
(MacおよびLinuxの場合)
質問:【Javaエラー】java.lang.UnsatisfiedLinkError
▼
このエラーは、MIDACOライブラリファイル「midacoj.dll」が正しく動作していないことを示しています。Eclipseでは、エラーメッセージの全文はおそらく次のようになります。Exception in thread "main" java.lang.UnsatisfiedLinkError: 'void Example.Midaco.runmidaco(int, int, int, int, int, int, int, double[], double[], double[], double[], double[], int[], int[], double[], double[], int, int[], int, double[], int, java.lang.String, int, int, int, int)'
このエラーには2つの原因が考えられます。
1)「midacoj.dll」ファイルが予期されたパスに見つからなかった場合。この場合、上記のエラーメッセージの前に、次のエラーメッセージが表示されます。ERROR: MIDACO DLL library file not found
このエラーを修正するには、「midacoj.dll」ファイルが現在の作業ディレクトリに置かれていることを確認してください。現在の作業ディレクトリはJavaでは以下のコマンドで表示されます(Midaco.javaの176行目を参照)。System.out.println("Working directory: " + System.getProperty("user.dir"));
もしくは、コンピュータ上のユーザーが指定した場所への固定パスを指定します(Midaco.javaの末尾を参照)。
2)「midacoj.dll」ファイルがパスに見つかっても、元のエラーが続く場合。これはEclipse(または他のIDE)プロジェクトの名前が「midacoj.dll」ファイルと一致しなかったことを示します。この場合、元のエラーメッセージは以下のように表示されます。java.lang.UnsatisfiedLinkError: 'void SomeOtherName.Midaco.runmidaco(
上の「SomeOtherName」は現在のEclipseプロジェクトの名前である可能性があります。このエラーを修正するには、私たちに連絡して、ユーザー指定のプロジェクト名で動作する「midacoj.dll」ファイルを作成する必要があります。
質問:【Javaエラー】Could not find or load main class Example_MO...
▼
答え:このエラーは、サンプルファイルの実行コマンドが正しくない場合に発生します。
サンプルファイルすべて(NLP、MINLPc、MOなどを含む)に対する正しい実行コマンドはjava Example
です。
(コマンドjava Example_NLP
、java Example_MINLPc
、java Example_MO
などは誤りです。)
質問:【C#エラー】 BadImageFormatException AccessViolation (HRESULT: 0x8007000B)
▼
答え:このエラーは、MS-Visual Studio内で誤ったプロジェクト設定が使用された場合に発生する可能性があります。
このエラーを修正するには、コンパイラ実行のプロジェクト設定で「AnyCPU」ではなく「x64」を指定してください。
詳細はこちら▷を参照のこと。
質問:【Rエラー】NA/NaN/Inf in foreign function call (arg 9)
▼
答え:このエラーは、制約条件のない問題で、g[] 配列としてダミー引数が返されない場合に起こります。このエラーを修正するには、問題関数に g[] 配列として次のようにダミー引数を含めてください。
# Dummy
g[1] = 0.0
output <- list(f,g)
return(output)
他の問題があった場合は、お気軽にお問い合わせください。