我正在尝试使用 CALL_EXTERNAL 函数从 IDL 运行 c++ 脚本。我已经能够让它在没有参数的情况下工作,但是当我尝试添加一个 arg 时,例如单个 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 关键字以将 arg 作为值传递。两者都不起作用,导致与上述相同的错误。我读过“胶水函数”,但我一直找不到制作它们的指南(尽管每个来源都表明它“对大多数程序员来说很容易””>。>
无论如何,我的选择如下,如果你能帮助我,我将永远感激:
- 让这个 CALL_EXTERNAL 函数工作
- 让 C 代码以某种方式从内存中获取所需的数据
- 用 C++ 重写所有东西(你不需要帮助这个)
提前致谢。