2

在一个源文件的 main() 方法中,我调用了 pthread_create(),如下所示:

pthread_t pth_chanrecv;
pthread_create(&pth_chanrecv, NULL, chanrecv_run, NULL);

“chanrecv_run”是我编写的另一个源文件中的一个函数。
这是函数原型:

void *chanrecv_run(void *arg);

函数原型位于我已包含在包含 main() 方法的源文件中的头文件中。

我正在使用以下语句编译我的程序:

gcc -lpthread -o bin/main2 src/main2.c

chanrecv_run() 函数位于名为“chanrecv.c”的文件中,也在 src 文件夹中。

每次我尝试编译它时,都会收到以下错误:

/tmp/ccHxRSTk.o: In function `main':
main2.c:(.text+0x256): undefined reference to `chanrecv_run'
collect2: ld returned 1 exit status

我不知道出了什么问题。我搜索了网络,试图找到另一个人试图使用 pthread_create 函数调用另一个文件中的函数并且完全空白的实例。这甚至可能吗?如果可以,怎么做?

4

2 回答 2

3

您需要将其添加到编译器调用中,以便在编译器启动链接时使其可用:

gcc -Wall -o main2 main2.c chanrecv.c -pthread
于 2012-11-07T13:25:34.933 回答
2

这个问题与 pthreads 无关。由于您尚未链接包含该chanrecv_run函数的第二个 .c 文件,因此链接器正在呻吟。

你需要:

gcc -lpthread -o bin/main2 src/main2.c src/file_with_chanrecv_run_in.c
于 2012-11-07T13:25:20.483 回答