Jam*_*sev 15 c reference undefined
我有2个文件:a.c和b.c
在a.c我发送信号到位于的功能b.c
signal(SIGUSR1,doSomething);
Run Code Online (Sandbox Code Playgroud)
在ac文件的顶部,我有:
extern void doSomething (int sig);
Run Code Online (Sandbox Code Playgroud)
但是,当我编译时,我收到一个错误:
/tmp/ccCw9Yun.o:在函数doSomething'colle2 :ld返回1退出状态
main':
a.c:(.text+0xba): undefined reference to
包括以下标题:
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
Jon*_*ler 17
你需要链接两个a.o和b.o:
gcc -o program a.c b.c
Run Code Online (Sandbox Code Playgroud)
如果main()每个文件中都有一个,则无法将它们链接在一起.
但是,您的a.c文件包含对doSomething()源文件的引用,并且期望与源文件链接,该源文件定义doSomething()并且不定义a.c(例如main())中定义的任何函数.
您无法从进程A调用进程B中的函数.您无法向函数发送信号; 您使用kill()系统调用向进程发送信号.
该signal()函数指定当前进程(程序)中的哪个函数将在您的进程收到信号时处理信号.
您有一些认真的工作要做,了解它是如何工作的 - ProgramA将如何知道将信号发送到哪个进程ID.在代码b.c的人都需要调用signal()与dosomething作为信号处理程序.代码a.c只是将信号发送到另一个进程.
mat*_*tnz 10
在.c文件中定义外部接口是非常糟糕的风格..
你应该做这个
啊
extern void doSomething (int sig);
Run Code Online (Sandbox Code Playgroud)
AC
void doSomething (int sig)
{
... do stuff
}
Run Code Online (Sandbox Code Playgroud)
公元前
#include "a.h"
.....
signal(SIGNAL, doSomething);
Run Code Online (Sandbox Code Playgroud)
.