gpt4 book ai didi

opencl - OpenCL 的 Linux 函数拦截

转载 作者:行者123 更新时间:2023-12-04 06:49:59 25 4
gpt4 key购买 nike

我对C相当陌生,所以要温柔。

我想使用Linux的库拦截方法,用我自己的库替换对OpenCL库的调用。我知道这可以使用 LD_PRELOAD 来完成。所以我可以在我自己的库中重新实现 OpenCL 头文件中定义的 OpenCL 函数,然后可以链接这些函数。

问题是这个 OpenCL header 还包含一些外部结构定义,例如

typedef 结构 _cl_mem * cl_mem;

未在 OpenCL header 中定义。这些结构是否可以在 OpenCL 共享库中定义?如果不是,它们可能在哪里定义?

干杯

克里斯

最佳答案

该 typedef 声明了一个指向结构的类型,其内容未声明。这意味着使用它的代码不能做诸如检查其大小、复制结构或检查其内容之类的事情——它根本不知道它的大小。
这是 C 中创建不透明或私有(private)类型的传统技术。您可以在 OpenCL 库中声明该结构,并且官方 header 对该结构包含的内容没有任何限制。它甚至可以是空的,如果您只需要一个可以存储在指针本身中的 ID,尽管很少这样做。
标准 C 库中使用的相同技术的一个示例是 FILE 类型。它可能像整数文件描述符一样简单,也可能像包含整个文件系统状态的结构一样复杂;标准的 C 代码不会知道。这些细节只有图书馆知道。

简而言之,您可以随意声明该结构 - 只要您实现处理该结构的每个函数。链接到您的库的程序从不处理该结构,只处理指向它的指针。

关于opencl - OpenCL 的 Linux 函数拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3266627/

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