【问题标题】:Interposing library: XOpenDisplay插入库:XOpenDisplay
【发布时间】:2010-01-02 16:00:27
【问题描述】:

我正在处理一个项目,我需要更改 X11/Xlib.h 中定义的 XOpenDisplay 函数的行为。

我找到了一个example,它应该完全符合我的要求,但是当我编译它时,我收到以下错误消息:

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()
{
}

问候, 安迪。

【问题讨论】:

    标签: xlib function-interposition library-interposition


    【解决方案1】:

    声明如下:

    显示 *XOpenDisplay(_Xconst char *display_name)

    所以只需添加一个 'const' 就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多