実行ファイルを実行して「LabVIEW: (Hex 0x6) 一般的なファイルI/Oエラーです」というダイアログが出た場合の原因と対処法

 


こんにちは、ドルフィンシステムの笹生です。

本日は RFSoC関連ではなく、久しぶりに LabVIEW でのはまり事についての記事になります。


実行形式のファイル (exe) を作成して、テスト用のマシンで実行させたときに事件が起こりました。

「LabVIEW: (Hex 0x6) 一般的なファイルI/Oエラーです。
ファイル ******** をロードできません。」

上記のようなダイアログが表示され、OK を押すたびに使用している USRP のライブラリ関連はじめ、色々なライブラリの VI がロードできないというエラーダイアログが次々に表示されました。

結論から言うと実行ファイルの「パスの長さ」が原因だったので、フォルダ名などを短くすれば対処できたのですが、最初原因がわからずちょっと焦りました。

Win32 のパス文字数制限とはまた違う LabVIEW の制限?

結構有名なのが Win32 のパスの文字数制限です。
これはググると結構出てくるので割とご存じの方も多いと思います。
以下の記事ではその制限を解除する方法も載っています


しかし今回のこの現象は、解除していている PC でも、していない PC でも起きたので、LabVIEW 自体の文字数制限だと思います。

LabVIEW の実行形式は vi のアーカイブ?

さて、ではなぜ上記のようなエラーが起きたのでしょうか。
実行ファイル自体のパスの長さは一応範囲内だったとしても、上記のエラーが起きるのですが、それは「C:\●●・・・\〇〇.exe¥△△・・・.vi」というパスで viなどが呼ばれているからのようです。

実行ファイル (*.exe)があくまでフォルダの様になって、その下に必要な vi や lib が展開されて実行開始時に呼ばれているようなのです。
その為、実行ファイル自体のパスの文字数がギリギリ大丈夫だとしても、展開しようとする vi た lib の文字数も合わせたときにオーバーすると、このようなエラーが発生するらしいのです。

対策は2パターン

対策は2パターンあると思います。
① 実行ファイル名もフォルダ階層も短くする
② ビルド時の設定を変更する。

①は最も単純な解決方法です。
パスが長いことのメリットはあまりないので、パスを短くするのが最も単純です。

②も一応解決しますが、これもレジストリをいじらずに深いパスに移動してしまえば同じことなので根本的ではないと思いますが多少は緩和される対処法ですね。
具体的な方法は以下の URL に記載されています。(これはビルド時にエラーする場合の対処法ですが、今回はビルド時ではなく実行時にエラーする点は異なります、)
ビルド時の設定の「上級」カテゴリを選択し、下部にある「LabVIEW 8.x のレイアウトを使用」にチェックを入れます。
これでビルドすると、実行ファイルと同じフォルダに必要なライブラリ等も作成されるので、この構造を保っておけば少し深いパスでも問題なく実行できるようになります。

まとめ

弊社がご提供している LabVIEW の実行形式でのソフトウェアをお使いの際に、実行してすぐにこのエラーが出たらパスの文字数をまずは疑っていただき、短いパスに移動して頂くなどの対処をして頂きたいと思います。
もちろんそれだけが原因ではないかもしれませんので、うまくいかない場合にはお手数ですがご連絡いただければと思います。



0 件のコメント :

コメントを投稿