Перехват функций Linux для OpenCL - PullRequest
2 голосов
/ 16 июля 2010

Я довольно новичок в C, так что будьте осторожны.

Я хочу использовать метод перехвата библиотек для Linux, чтобы заменить вызовы библиотеки OpenCL моей собственной библиотекой. Я понимаю, что это можно сделать с помощью LD_PRELOAD. Поэтому я могу просто заново реализовать функции OpenCL, как определено в заголовочном файле OpenCL в моей собственной библиотеке, с которой затем можно связать.

Проблема в том, что этот заголовок OpenCL также содержит некоторые определения внешних структур, например,

typedef struct _cl_mem * cl_mem;

, которые не определены в заголовке OpenCL. Возможно ли, что эти структуры определены в общей библиотеке OpenCL? Если нет, где они могут быть определены?

Приветствия

Chris

1 Ответ

3 голосов
/ 19 июля 2010

Этот typedef объявляет тип, указывающий на структуру, содержимое которой не объявлено.Это означает, что код, использующий его, не может делать такие вещи, как проверка его размера, копирование структуры или проверка его содержимого - он просто не знает, какой у него размер.Это традиционный метод в C для создания непрозрачного или частного типа.Вы можете объявить структуру внутри вашей библиотеки OpenCL, и официальный заголовок не накладывает никаких ограничений на то, что содержит эта структура.Он может даже быть пустым, если все, что вам нужно, это идентификатор, который вы можете сохранить в самом указателе, хотя это редко делается.Примером того же метода, который используется в стандартной C-библиотеке, является тип FILE.Это может быть как простой целочисленный дескриптор файла, так и сложный, как структура, содержащая все состояние файловой системы;стандартный код C не будет знать.Подробности известны только библиотеке.

Короче говоря, вы можете объявить эту структуру так, как вам нравится - при условии, что вы реализуете каждую функцию, которая обрабатывает эту структуру.Программа, которая ссылается на вашу библиотеку, никогда не обрабатывает структуру, а только указывает на нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...