未定义的引用主要问题 [英] undefined reference to main issue

查看:169
本文介绍了未定义的引用主要问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经写了名为utilfunc.c一个C code这个文件code包含我的职务,我将通过我的code使用。

现在,当我编译我的utilfunc.c文件中的错误发生的事情告诉我,未定义引用主的错误消息。但在这个code我不想让。我想是我的职能只是实现。

谁能告诉我这里发生了什么?

这是我的code:

 包括prodcon.h静态无效signalHandler(INT预兆报)
{
    signalflag = 1; //设置信号旗
}无效initializeWait(无效)
{
    / *链接处理函数* /
    如果(信号(SIGUSR1,signalHandler)== SIG_ERR)
    {
        PERROR(信号);
        出口(EXIT_FAILURE);
    }
    如果(信号(SIGUSR2,signalHandler)== SIG_ERR)
    {
        PERROR(信号);
        出口(EXIT_FAILURE);
    }    / *清除口罩* /
    sigemptyset(安培; nomask);
    sigemptyset(安培;为newmask);    / *增加信号屏蔽套* /
    sigaddset(安培;为newmask,SIGUSR1);
    sigaddset(安培;为newmask,SIGUSR2);    / *块SIGUSR1和SIGUSR2,并保存当前的信号掩码。 * /
    如果(sigprocmask(SIG_BLOCK,&放大器;为newmask,&放大器; oldmask)℃的)
    {
        PERROR(sigprocmask);
        出口(EXIT_FAILURE);
    }
}无效signalParent(将为pid_t PID)
{
    杀(PID,SIGUSR2); //孩子告诉,这是做父母
}无效waitParent(无效)
{
    而(signalflag == 0)
    {
        sigsuspend(安培; nomask); //等待来自父信号
    }    signalflag = 0; //清除singalflag    / *信号掩码恢复到原来的值* /
    如果(sigprocmask(SIG_SETMASK,&放大器; oldmask,NULL)℃的)
    {
        PERROR(sigprocmask);    }
}


解决方案

添加 -c 你的编译器调用,所以你只的编译的翻译单元,但没有的链接的它一个完整的程序:

 的gcc -o -c文件foo.c文件foo.o

I have written a c code file called "utilfunc.c" this code contains my functions that I will use through my code.

Now when I am compiling my "utilfunc.c" file an error happened telling me that undefined reference to 'main' error message . But on this code I don't want the main . What I want is just implementations for my functions.

Can anybody tell me what is happening here?

here is my code :

include "prodcon.h"

static void signalHandler(int signo)
{
    signalflag = 1; // Set the signal flag
}

void initializeWait(void)
{
    /* Link handler functions */
    if (signal(SIGUSR1, signalHandler) == SIG_ERR)
    {
        perror("signal");
        exit(EXIT_FAILURE);
    }
    if (signal(SIGUSR2, signalHandler) == SIG_ERR)
    {
        perror("signal");
        exit(EXIT_FAILURE);
    }

    /* Clear masks */
    sigemptyset(&nomask);
    sigemptyset(&newmask);

    /* Add signals to mask sets */
    sigaddset(&newmask, SIGUSR1);
    sigaddset(&newmask, SIGUSR2);

    /* Block SIGUSR1 and SIGUSR2, and save current signal mask. */
    if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
    {
        perror("sigprocmask");
        exit(EXIT_FAILURE);
    }
}

void signalParent(pid_t pid)
{
    kill(pid, SIGUSR2); // Child tells parent that it is done
}   

void waitParent(void)
{
    while (signalflag == 0)
    {
        sigsuspend(&nomask);    // Wait for signal from parent
    }

    signalflag = 0; // Clear the singalflag

    /* Restore the signal mask to old value */
    if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
    {
        perror("sigprocmask");

    }
}

解决方案

Add -c to your compiler invocation, so that you only compile the translation unit but do not link it to a complete program:

gcc -c -o foo.o foo.c

这篇关于未定义的引用主要问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆