0

我正在尝试将 gtest 与 libtorch 一起使用。目前,我有一个基本的测试程序:

#include <gtest/gtest.h>

TEST(WorldMapTests, FirstTest) {
    ASSERT_TRUE(true);
}

然后我有一个主要制作,我在第三方文件夹中获取火炬,如下所示:

set(TORCH_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/third-party/libtorch")
set(Torch_DIR "${TORCH_INSTALL_PREFIX}/share/cmake/Torch")
set(pybind11_INCLUDE_DIR "${TORCH_INSTALL_PREFIX}/include/pybind11")

然后我的测试看起来像:

cmake_minimum_required(VERSION 3.0)

set(CMAKE_CXX_STANDARD 14)

set(This ${PROJECT_NAME}_test)

set(Sources
  cpp/WorldMapTests.cpp
)


############################################################## gtest
# Download and unpack googletest at configure time
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)

--- SNIP --- (test configure stuff from the github)

endif()
############################################################## gtest




add_executable(${This} ${Sources})

target_link_libraries(${This} PUBLIC
    ${TORCH_LIBRARIES}
    gtest
    gtest_main
    ${PROJECT_NAME}
)

target_include_directories(${This} PUBLIC ${TORCH_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
target_compile_options(${This} PUBLIC ${TORCH_CXX_FLAGS})

add_test(
    NAME ${This}
    COMMAND ${This}
)

当我在发布版本中编译时它很好。如果我的链接目录中不包含“${TORCH_LIBRARIES}”也可以。但是,当我链接到 Torch 并在调试下进行测试时,我得到以下信息:

.../test/cpp/WorldMapTests.cpp:5: undefined reference to `testing::internal::GetBoolAssertionFailureMessage(testing::AssertionResult const&, char const*, char const*, char const*)'

我认为这是因为torch 利用了测试并在发布版本下编译。我在torch下的lib文件夹中手动找到了一个gtest.so并删除了它,看看它是否可以解决它,但它没有。

4

1 回答 1

0

经过相当多的研究,我能够正确。只是想为遇到相同问题的任何人发布更新。问题来自 libtorch 在发布模式下编译而不是调试导致与 gtest 库发生冲突。在 Windows 上,这很容易解决,因为 torch 提供了预编译的开发库。但是,在 linux 上,您需要从源代码编译您自己的,然后链接它。我使用以下指南为 C++“https://kezunlin.me/post/54e7a3d8/”编译了火炬。

于 2020-07-26T06:55:18.877 回答