未定义的引用主要问题 [英] undefined reference to main issue
问题描述
我已经写了名为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屋!