makefile的文件如下 
a : main.o  conn.o welcome.o 
gcc -g  -idirafter$(ORACLE_HOME)/precomp/public $^  -o  $@  -L$(ORACLE_HOME)/lib -lclntsh -lncurses 
main.o : main.c  welcome.h 
gcc -g -c main.c -o main.o welcome.o : welcome.c welcome.h 
gcc -g -c $ < -o $@ conn.o : conn.c conn.h 
gcc  -g -c -idirafter$(ORACLE_HOME)/precomp/public $ <  -o  $@ 
conn.c : conn.pc conn.h 
proc config=oracle.cfg conn.pc 
:PHONY clean clean : 
rm -f *.o 
main.c中只调用一个welcome.c的函数 用来显示界面 没有任何数据库操作 有数据库操作的函数都在conn.c中 
但是生成的a却会调用conn.c中的函数去连接数据库 提示连接失败 很奇怪 #include <stdio.h> 
#include "welcome.h" 
int main() 

welcomelogin(); 
return 0; 
}

解决方案 »

  1.   

    welcomelogin函数怎么写的?贴出来看看
    或者在main中把这一句注释掉,再看看a执行的时候会不会调用连接函数
      

  2.   

    都是ncurse 绘制窗口的函数
    只要执行到wrefresh(某窗口);
    就立刻连接数据库 #include <ncurses.h>
    #include "welcome.h"
    #include "conn.h"
    void print_stdscr()
    {

    int row=0, col=0;
    getmaxyx(stdscr,row,col);
    init_pair(1, COLOR_BLACK, COLOR_BLUE);
    init_pair(2, COLOR_BLACK, COLOR_WHITE);
    init_pair(3, COLOR_WHITE, COLOR_RED);
    bkgd(COLOR_PAIR(1));//char str[]="helo";char *p=malloc();
    attron(COLOR_PAIR(2));
    chgat(-1, A_REVERSE, 0, NULL);
    printw( "超市收银系统");
    mvchgat(row-1, 0,-1, A_REVERSE, 0, NULL);
    //move(row-1,0);
    printw( "版本");
    attroff(COLOR_PAIR(2));
    refresh();
    //return stdwin;
    }//中间窗口-----------------------------------------
    WINDOW *print_centerwin()
    {
    int row=0, col=0;
    getmaxyx(stdscr,row,col);
    init_pair(4, COLOR_BLACK, COLOR_WHITE);
    WINDOW *centerwin;
    centerwin=newwin(12, 40, (row-12)/2, (col-40)/2);
    wbkgd(centerwin,COLOR_PAIR(4));
    box(centerwin, 0 , 0);
    mvwprintw(centerwin, 0, 12, "欢迎进入登录窗口");
    mvwprintw(centerwin, 3, 8, "帐号:");
    mvwprintw(centerwin, 5, 8, "密码:");
    wrefresh(centerwin);
    return centerwin;
    }
    //中间窗口结束-----------------------------------------...代码太长了 就不写了
    welcomelogin这边调用打印的函数如 print_centerwin()
    delwin(centerwin);
    delwin(inputuserwin);
    delwin(inputpasswdwin);
    delwin(okwin);
    delwin(exitwin);
    endwin();
    return 0;
    }