Я пытаюсь сделать testbench для своей программы, используя gmock/gtest; Linux/Ubuntu; KDevelop/CMake. Из сообщения об ошибке ссылки я заключаю, что часть пакета gtest отсутствует поддержка pthread.cmake не считает -pthread
/home/projects/cpp/gmock/gtest/libgtest.a(gtest-all.cc.o): In function `testing::internal::ThreadLocal<testing::TestPartResultReporterInterface*>::~ThreadLocal()':
gtest-all.cc:(.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev[_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED5Ev]+0x16): undefined reference to `pthread_getspecific'
gtest-all.cc:(.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev[_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED5Ev]+0x2b): undefined reference to `pthread_key_delete'
Я также прочитал
Использование г ++ непосредственно, все работает. Итак, поскольку я использую KDevelop/CMake, я подозреваю, что либо мой код, либо CMake.
В моей CMakeLists.txt я использую
add_definitions(-pthread -m64)
Однако, я не вижу никакого эффекта в Makefile. Я что-то упустил из своего CMakeLists.txt, или CMake не считает строку выше?
Мои CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
add_definitions(-Dpthread)
project(ThreadTest)
INCLUDE_DIRECTORIES(gmock/gtest/include)
set (GTEST_LIBS libgtest.a)
link_directories(~/projects/cpp/gmock/gtest)
add_executable(ThreadTest main_test.cpp)
target_link_libraries(ThreadTest ${GTEST_LIBS})
ли я неправильно понять, что add_definitions должен работать в этой ситуации?
После прочтения How do I force cmake to include "-pthread" option during compilation? мой вопрос действительно выглядит как дубликат. Тем не менее,
cmake_minimum_required(VERSION 2.8)
add_definitions(-Dpthread)
project(ThreadTest)
INCLUDE_DIRECTORIES(gmock/gtest/include)
find_package(Threads)
set (GTEST_LIBS libgtest.a)
link_directories(~/projects/cpp/gmock/gtest)
add_executable(ThreadTest main_test.cpp)
target_link_libraries(ThreadTest ${GTEST_LIBS} ${CMAKE_THREAD_LIBS_INIT})
все еще дает предупреждение «Не удалось найти темы». Я попытался найти программный центр Ubuntu для «потоков», без результата. После этого я установил libghc-threads-dev. Однако при использовании
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads REQUIRED)
Я продолжаю получать «Не удалось найти темы», как ошибку. Что мне делать, чтобы удовлетворить find_package, и почему у меня возникает эта проблема, когда простой Makefile создает то, что я ожидаю?
PS: мой главный файл:
#include "gmock/gtest/include/gtest/gtest.h"
TEST(blahTest, blah1) {
EXPECT_EQ(1, 1);
}
int main (int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
int returnValue;
returnValue = RUN_ALL_TESTS();
return returnValue;
}
Возможный дубликат для http://stackoverflow.com/questions/5 395309/cmake-and-threads –
для CMake add link_libraries (pthread) –