我在C中有一个多线程程序,它运行良好,但是在一个main.cpp文件中。
我已将该线程移动到另一个.cpp文件中并添加了它的签名,void * displayScreen(void *); ,在标题中。我在最初的main.cpp文件中包含了标题。
编译工作但链接器在尝试调用pthread_create()时返回错误:未定义引用`displayScreen(void *)'
它看起来好像编译了displayScreen(void *),但不知道从哪里加载它。有没有办法让我告诉链接器在哪里找到它或者我做错了吗?
非常感谢。
答案 0 :(得分:0)
单独添加签名可让您编译主翻译单元,但您仍需要单独编译该函数的实现并链接这两个:
<强>的main.cpp 强>
void* displayScreen(void*);
int main()
{
/* .... */
}
<强> display.cpp 强>
void* displayScreen(void*)
{
/* implementation */
}
<强>编译:强>
g++ -O2 -o main.o main.cpp
g++ -O2 -o display.o display.cpp
链接:强>
g++ -o myprogram main.o display.o -lpthread -s