未定义的主要问题参考

arz*_*ade 2 c unix

我写了一个名为"utilfunc.c"的代码文件,这段代码包含了我将通过代码使用的函数.

现在,当我编译我的"utilfunc.c"文件时,发生了一个错误,告诉我对'main'错误消息的未定义引用.但是在这段代码上我不想要main.我想要的只是我的功能的实现.

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

这是我的代码:

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");

    }
}
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 9

添加-c到您的编译器调用,以便您只编译翻译单元但不链接到完整的程序:

gcc -c -o foo.o foo.c
Run Code Online (Sandbox Code Playgroud)