2012-05-24 31 views
2

出於某種原因,我遇到了編譯使用ncurses的共享對象的問題。即使我包含並鏈接到-lncurses,編譯.so文件失敗。請指教。無法鏈接到共享對象中的ncurses

#include <string.h> 
#include "../include/mod_curse.h" /* Includes ncurses.h and friends */ 

int OnConsoleCmd(McapiS *API, ArgS *CmdArgs) /* Just ignore these, they're included in mod_curse.h */ 
{ 
    if(!strcmp(CmdArgs->Data, "help")) 
    { 
     API->BPrintf(STD, "\n-- mod_curse.so --\n"); 

     return 0; 
    } 
} 

int OnLoad(McapiS *API, va_list Args) 
{ 
    initscr(); /* These are the problems */ 
} 

/* Time to clean up and unload the module */ 
int OnDeload(McapiS *API, va_list Args) 
{ 
    endwin(); 
} 

這裏是Makefile中:

CC = clang 
CFLAGS = -Wall -fPIC 

# Object Files 
OBJ = mod_curse.o 
# Header Files 
INCLUDE = include/mod_curse.h 


# Main Module 
mod_setup.so: $(OBJ) $(INCLUDE) 
    $(CC) -shared -Wl,-soname,mod_curse.so,--no-undefined -o ../../mod_curse.so -lncurses $(OBJ) 

# Source Files 
mod_curse.o: src/mod_curse.c $(INCLUDE) 
    $(CC) $(CFLAGS) -c src/mod_curse.c 

clean: 
    rm $(OBJ) 

下面是錯誤:

3 warnings generated. 
clang -shared -Wl,-soname,mod_curse.so,--no-undefined -o ../../mod_curse.so -lncurses mod_curse.o 
mod_curse.o: In function `OnLoad': 
src/mod_curse.c:(.text+0x81): undefined reference to `initscr' 
mod_curse.o: In function `OnDeload': 
src/mod_curse.c:(.text+0xb1): undefined reference to `endwin' 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [mod_setup.so] Error 1 

回答

2

我需要改變我的make命令有$(OBJ)後-lncurses出現。