2010-01-02 4 views
0

X11/Xlib.h에 정의 된 XOpenDisplay 함수의 동작을 변경해야하는 프로젝트에서 작업하고 있습니다.라이브러리 삽입 : XOpenDisplay

나는 정확히 내가 무엇을 찾고해야 example을 찾았지만, 한 내가 컴파일 할 때, 내가받을 다음과 같은 오류 메시지 :

XOpenDisplay_interpose.c:14: Error: conflicting types for »XOpenDisplay« /usr/include/X11/Xlib.h:1507: Error: previous declaration of »XOpenDisplay« was here

사람이 그 문제를 도와 줄 수 있습니까? 내가 뭘 놓치고 있니?

내 프로그램 코드

지금까지 - 위에서 언급 한 예에 따라 :

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

안부, 앤디.

답변

0

선언은 다음과 같이 읽습니다 그러니 그냥 충분해야 '를 const'를 추가

표시 *의 XOpenDisplay (_Xconst의 char *의 DISPLAY_NAME)

.

+0

도움 주셔서 감사합니다. – OldMacDonald