gpt4 book ai didi

c++ - 将参数传递给 C++ 时 IDL CALL_EXTERNAL 崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 14:04:57 26 4
gpt4 key购买 nike

我正在尝试使用 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 关键字以将 arg 作为值传递。两者都不会导致与上述相同的错误。我读过关于“胶水函数”的内容,但我没能找到制作它们的指南(尽管每个来源都表明它“对大多数程序员来说很容易”)>.>

无论如何,我的选择如下,如果您能帮助我,我将永远感激不已:

  1. 让这个 CALL_EXTERNAL 函数起作用
  2. 让 C 代码以某种方式从内存中获取它需要的数据
  3. 用 C++ 重写所有内容(你不需要帮忙)

提前致谢。

最佳答案

我认为您正在尝试混合使用 32 位和 64 位代码。看起来您正在将代码编译为 64 位,但您正在运行 32 位 IDL。要检查这一点,IDL 在启动时打印它,或者您可以手动检查:

IDL> print, !version.memory_bits
64

关于c++ - 将参数传递给 C++ 时 IDL CALL_EXTERNAL 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com