C ++线程找不到函数作为参数(链接器)[重复]
Posted
技术标签:
【中文标题】C ++线程找不到函数作为参数(链接器)[重复]【英文标题】:C++ thread can't find function as parameter(linker) [duplicate] 【发布时间】:2018-09-27 19:46:51 【问题描述】:我正在构建多人乒乓球。到目前为止,球员们的动作都很好。我现在专注于球的运动。所以我添加了标记球的刻度函数。
错误行在 main.cpp 内:(第 3 行)(其他 2 行正常)
client_network_thread_sendto = thread(sendto_network_loop, &running, &me);
client_network_thread_recvfrom = thread(recvfrom_network_loop, &running, &opponent);
client_tick_thread = thread(tick_loop, &me, &opponent, &ball);
链接器:
make
clang++-5.0 -Wall -std=c++11 -Iinclude -g -c src/network.cpp -o build/network.o
clang++-5.0 -Wall -std=c++11 -Iinclude -g -c src/server.cpp -o build/server.o
clang++-5.0 -Wall -std=c++11 -Iinclude -g -c src/geometry.cpp -o build/geometry.o
clang++-5.0 -Wall -std=c++11 -Iinclude -g -c src/player.cpp -o build/player.o
clang++-5.0 -Wall -std=c++11 -Iinclude -g -c src/client.cpp -o build/client.o
clang++-5.0 -Wall -std=c++11 -Iinclude -g -c src/defaults.cpp -o build/defaults.o
clang++-5.0 -Wall -std=c++11 -Iinclude -g -c src/main.cpp -o build/main.o
clang++-5.0 -lglut -lGL -lGLU -lpthread build/network.o build/server.o build/geometry.o build/player.o build/client.o build/defaults.o build/main.o -o bin/main.out
build/main.o: In function `main':
/home/shlomi/Desktop/CPP_OpenGL_Pong_Multiplayer/src/main.cpp:199: undefined reference to `tick_loop(player*, player*, moving_circle*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:31: recipe for target 'link' failed
make: *** [link] Error 1
client.h:
void sendto_network_loop(bool* running, player* me);
void recvfrom_network_loop(bool* running, player* opponent);
void tick_loop(player* me, player* opponent, moving_circle* ball);
client.cpp:(实现)
void tick_loop(player* me, player* opponent, moving_circle* ball)
ball->tick();
我尝试清理和重建,在互联网上搜索相同的问题,并询问朋友。
【问题讨论】:
可能client.cpp
没有被编译为可执行文件的一部分。
【参考方案1】:
这是一个链接器错误。当您尝试从 main.cpp 创建可执行文件时,您不能包含 client.cpp。显示你的构建命令吗?
【讨论】:
对不起。修复。添加了所有的构建输出。 不要单独编译main.cpp,应该这样编译;clang++-5.0 -lglut -lGL -lGLU -lpthread build/network.o build/server.o build/geometry.o build/player.o build/client.o build/defaults.o main.cpp -o bin/main.out
以上是关于C ++线程找不到函数作为参数(链接器)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C++11多线程第三篇:线程传参详解,detach()大坑,成员函数做线程参数
C++11多线程第三篇:线程传参详解,detach()大坑,成员函数做线程参数
std::unique_ptr 作为参数在 std::thread 中起作用 [重复]