C ++ 17:pthread

时间:2018-05-02 20:53:04

标签: c++ multithreading makefile

具有

CXXFLAGS += -Wall -Werror -Wextra -std=c++17
CXXFLAGS += -I inc/ -lpthread -pthread

SRC =   ...
OBJ =   $(SRC:.cpp=.o)

NAME    =   ...

$(NAME): $(OBJ)
    g++ $(OBJ) -o $(NAME)

all: $(NAME)

$(NAME): $(OBJ)
    g++ $(OBJ) -o $(NAME)

我单独使用 - pthread,单独使用 - lpthread,两者都试过。 编译时仍然出现以下错误:

g++ src/Main.o src/Logger.o src/handlers/MasterPacketHandler.o src/handlers/SlavePacketHandler.o src/netwotk/AbstractPacketHandler.o src/netwotk/NetworkBuffer.o src/netwotk/NetworkClient.o src/netwotk/NetworkProtocol.o src/netwotk/NetworkServer.o src/process/SlaveWorker.o src/process/Task.o src/process/TaskDispatcher.o src/process/ThreadPoolExecutor.o src/process/Timer.o src/protocol/DestroyProcessMessage.o src/protocol/FreePlaceMessage.o src/protocol/SearchRequestMessage.o src/protocol/SearchResultMessage.o -o plazza
src/Main.o : Dans la fonction « std::__shared_mutex_pthread::unlock() » :
Main.cpp:(.text._ZNSt22__shared_mutex_pthread6unlockEv[_ZNSt22__shared_mutex_pthread6unlockEv]+0x14) : référence indéfinie vers « pthread_rwlock_unlock »
src/Main.o : Dans la fonction « std::__shared_mutex_pthread::lock_shared() » :
Main.cpp:(.text._ZNSt22__shared_mutex_pthread11lock_sharedEv[_ZNSt22__shared_mutex_pthread11lock_sharedEv]+0x14) : référence indéfinie vers « pthread_rwlock_rdlock »
src/netwotk/NetworkClient.o : Dans la fonction « std::__shared_mutex_pthread::lock() » :
NetworkClient.cpp:(.text._ZNSt22__shared_mutex_pthread4lockEv[_ZNSt22__shared_mutex_pthread4lockEv]+0x14) : référence indéfinie vers « pthread_rwlock_wrlock »
src/netwotk/NetworkClient.o : Dans la fonction « std::thread::thread<std::thread& (NetworkClient::*)(bool), NetworkClient*, bool>(std::thread& (NetworkClient::*&&)(bool), NetworkClient*&&, bool&&) » :
NetworkClient.cpp:(.text._ZNSt6threadC2IM13NetworkClientFRS_bEJPS1_bEEEOT_DpOT0_[_ZNSt6threadC5IM13NetworkClientFRS_bEJPS1_bEEEOT_DpOT0_]+0x2a) : référence indéfinie vers « pthread_create »
src/netwotk/NetworkServer.o : Dans la fonction « std::thread::thread<std::thread& (NetworkServer::*)(bool), NetworkServer*, bool>(std::thread& (NetworkServer::*&&)(bool), NetworkServer*&&, bool&&) » :
NetworkServer.cpp:(.text._ZNSt6threadC2IM13NetworkServerFRS_bEJPS1_bEEEOT_DpOT0_[_ZNSt6threadC5IM13NetworkServerFRS_bEJPS1_bEEEOT_DpOT0_]+0x2a) : référence indéfinie vers « pthread_create »
src/process/ThreadPoolExecutor.o : Dans la fonction « std::thread::thread<void (ThreadPoolExecutor::*)(), ThreadPoolExecutor*>(void (ThreadPoolExecutor::*&&)(), ThreadPoolExecutor*&&) » :
ThreadPoolExecutor.cpp:(.text._ZNSt6threadC2IM18ThreadPoolExecutorFvvEJPS1_EEEOT_DpOT0_[_ZNSt6threadC5IM18ThreadPoolExecutorFvvEJPS1_EEEOT_DpOT0_]+0x24) : référence indéfinie vers « pthread_create »
src/process/Timer.o : Dans la fonction « std::thread::thread<void (Timer::*)(), Timer*>(void (Timer::*&&)(), Timer*&&) » :
Timer.cpp:(.text._ZNSt6threadC2IM5TimerFvvEJPS1_EEEOT_DpOT0_[_ZNSt6threadC5IM5TimerFvvEJPS1_EEEOT_DpOT0_]+0x24) : référence indéfinie vers « pthread_create »
collect2: error: ld returned 1 exit status
Makefile:28 : la recette pour la cible « plazza » a échouée
make: *** [plazza] Erreur 1

这是一个法语编译器:/但它表示对pthread_rwlock_unlockpthread_create的未定义引用。 我的lib pthread安装得很好,是否因使用c ++ 17中的shared_mutex而出现此错误?

1 个答案:

答案 0 :(得分:2)

您只需要-pthread

此外CXXFLAGS仅将自己添加到隐式规则,如果您制作显式规则,则需要自行添加

$(NAME): $(OBJ)
    g++ $(CXXFLAGS) $(OBJ) -o $(NAME)
相关问题