Вставка библиотеки: XOpenDisplay
Я работаю над проектом, в котором мне нужно изменить поведение функции XOpenDisplay, определенной в X11 / Xlib.h.
Я нашел пример, который должен делать именно то, что я ищу, но когда я его компилирую, я получаю следующие сообщения об ошибках:
XOpenDisplay_interpose.c: 14: Ошибка: конфликтующие типы для "XOpenDisplay" /usr/include/X11/Xlib.h:1507: Ошибка: предыдущее объявление "XOpenDisplay" было здесь
Может ли кто-нибудь помочь мне с этой проблемой? Что мне не хватает?
Мой программный код на данный момент основан на примере, упомянутом выше:
#include <stdio.h>
#include <X11/Xlib.h>
#include <dlfcn.h>
Display *XOpenDisplay(char *display_name)
{
static Display *(*func)(char *);
Display *ret;
void* handle=NULL;
handle = dlopen ("XOpenDisplay_interpose.so", RTLD_LAZY);
if(!handle){
fprintf(stderr, "ERROR dlopen\n");
}
if(!func)
func = (Display *(*)(char *))dlsym(handle,"XOpenDisplay");
if(display_name)
printf("XOpenDisplay() is called with display_name=%s\n", display_name);
else
printf("XOpenDisplay() is called with display_name=NULL\n");
ret = func(display_name);
printf(" calling XOpenDisplay(NULL)\n");
ret = func(0);
printf("XOpenDisplay() returned %p\n", ret);
return(ret);
}
int XCloseDisplay(Display *display_name)
{
static int (*func)(Display *);
int ret;
void* handle=NULL;
handle = dlopen ("XOpenDisplay_interpose.so", RTLD_LAZY);
if(!handle){
fprintf(stderr, "ERROR dlopen\n");
}
if(!func)
func = (int (*)(Display *))dlsym(handle,"XCloseDisplay");
ret = (int)func(display_name);
printf("called XCloseDisplay(%p)\n", display_name);
return(ret);
}
int main()
{
}
С уважением, Энди.
1 ответ
Решение
Объявление выглядит так:
Показать *XOpenDisplay(_Xconst char *display_name)
Так что достаточно просто добавить "const".