CALL_EXTERNAL 関数を使用して IDL から C++ スクリプトを実行しようとしています。引数なしで動作させることができましたが、単一の IDL LONG INT などの引数を追加しようとすると、IDL がクラッシュします。エラーで:
% CALL_EXTERNAL: Error loading sharable executable.
Symbol: main, File = /home/inspired/workspace/TestCode/main.
so
/home/inspired/workspace/TestCode/main.so: wrong ELF class:
ELFCLASS64
% Execution halted at: TEST_EXTERNAL 7
/home/inspired/IDLWorkspace/Analyze Data/test_external.pro
% $MAIN$
私が使用しているテストコードは次のとおりです。
C++ コード:
#include <iostream>
int main(int argc, char *argv[]) {
int temp = (int) strtod(argv[1], NULL);
std:cout<<temp;
return temp;
}
IDL コード:
pro test_external
c= call_external('/home/inspired/workspace/TestCode/main.so','main', long(2), /AUTO_GLUE)
print,c
end
もちろん、このコードは練習用のコードですが、これを機能させることができなければ、配列と値の混合物を渡すことはできません。
特に明記しない限り、IDL は参照によってすべてを渡します。そのため、渡された引数を C++ コードのポインターとして扱い、 /ALL_VALUE キーワードを設定して引数を値として渡すようにしました。どちらも機能せず、上記と同じエラーが発生します。「グルー関数」について読んだことがありますが、それらを作成するためのガイドを見つけることができませんでした (すべてのソースが「ほとんどのプログラマーにとって簡単」であることを示しているにもかかわらず)" >.>
とにかく、私のオプションは次のとおりです。何かお手伝いできることがあれば、永遠に感謝します。
- この CALL_EXTERNAL 関数を機能させる
- C コードで必要なデータを何らかの方法でメモリから取得する
- すべてを C++ で書き直します (これを手伝う必要はありません)。
前もって感謝します。