gpt4 book ai didi

c - Ada 与 C 函数导入段错误

转载 作者:行者123 更新时间:2023-11-30 14:47:02 26 4
gpt4 key购买 nike

我正在 Ada 中开发一个程序,该程序最近从 32 位升级到 64 位。我没有编写此代码,我只是负责让它在 64 位版本的 RedHat 上运行。

我仍在解决此迁移引起的错误。此代码存在段错误,而以前则没有。

这是 Ada 函数

function Read_Fields
(table : DB_API_Types.DB_Table_Type;
key : System.Address;
return_fields : System.Address;
function : Process_DB_Access_Type;
client : System.Address)
return C_Types.Int;
pragma Interface(C, Read_Fields);
pragma Import_Function
(Internal => Read_Fields,
External => "GetFields",
Result_Type => C_Types.Int);

这是 C 函数

int GetFields ( DB::table_code table_type, char *key,
char **return_fields, DB::GetFieldCB function,
void *client) {
return ( DB::System::Ptr()->get_fields(table_type, key, return_fields, func, client));
}

这是在 Ada 中调用此函数的示例

DB_Status :=
Read_Fields
(table => table,
key => c_types.null_terminated.to_address_or_null_pointer(field),
return_fields => table_Fields'address,
function => Process_Data'access,
client => read_Data_Return'address);

这让我有点困惑,我有怀疑,但我不确定内存地址如何跨语言接口(interface)工作。我假设它们都作为机器语言处于同一个进程中,所以这根本不重要,但我可能会遗漏一些东西。

任何帮助都会很棒!

最佳答案

您可以使用 GCC/G++ 的 -fdump-ada-spec 标志重新生成与 C++ 函数的绑定(bind)。这样您就可以获得编译器开发人员认为可以与该版本的 GCC 正常工作的绑定(bind)。 (官方要求您使用相同版本的 GCC 来编译 Ada 和 C++,但实际上您可能会得到适用于更广泛的编译器版本的东西。)

关于c - Ada 与 C 函数导入段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51728517/

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