Вставка библиотеки: 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".

Другие вопросы по тегам