【发布时间】:2020-02-18 23:00:21
【问题描述】:
我正在将 LibTorch 和 OpenCV 用于 Cpp 中的程序。编译和构建是在 Linux 上使用 CMake 完成的。程序按预期构建和运行。
我想使用 CMake 在另一台 Linux 机器上创建的可执行文件。 问题是我不想在另一台机器上安装 LibTorch 或 OpenCV。如果可能的话,我宁愿为用户提供一个可执行文件。
CMake 如何创建一个独立的可执行文件? 如果只制作一个文件无关紧要,CMake 如何将所有需要的库复制到一个目录?
当前的 CMake 文件:
cmake_minimum_required(VERSION 2.8)
project(prediction)
list(APPEND CMAKE_PREFIX_PATH “libtorch”) # the folder where libtorch in found
set(CMAKE_BUILD_TYPE Release)
find_package( OpenCV REQUIRED )
find_package( Torch REQUIRED )
if(NOT Torch_FOUND)
message(FATAL_ERROR “Pytorch Not Found!”)
endif(NOT Torch_FOUND)
message(STATUS “Pytorch status:”)
message(STATUS " libraries: ${TORCH_LIBRARIES}")
message(STATUS “OpenCV library status:”)
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
file(GLOB SOURCES ".h" ".cpp") # Link all headers and sources in root dir
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable(entrypoint ${SOURCES})
target_link_libraries(entrypoint ${TORCH_LIBRARIES} ${OpenCV_LIBS})
set_property(TARGET entrypoint PROPERTY CXX_STANDARD 14)
####### 编辑
感谢您的回答。 在下面的 Phesho_T 回答之后,我得到了 LibTorch 的静态编译,但它不会使用 set() 指令进行编译。它抛出 C10_LIBRARY NOTFOUND。
我想我会尝试使用共享库。如何指示 CMake 将相关共享库复制到“build”文件夹,以便我可以将所有内容打包到 .zip 文件中并将其发送给用户。
【问题讨论】:
-
为您不自己构建/维护的模块提供共享库通常是个坏主意。它们可能依赖于其他共享库,这些可能依赖于其他共享库等等 - 您不能将所有依赖项发送给您的最终用户或保证他们将安装所需的包。
-
知道了。因此,为了在另一台机器上运行可执行文件: 1. 在另一台机器上安装 LibTorch 和 OpenCV 库。 2. 再次运行 CMake。对吗?
-
在机器 A 上构建应用程序后,您可以将可执行文件复制到已经安装了 LibTorch 和 OpenCV 的机器 B 上,并且您可以在不再次运行 CMake 的情况下运行它,假设:1) A 和B 使用相同的指令集(即 x86)和 2)它们具有相同版本的两个库,或者它们具有 API 和 ABI 兼容的两个不同版本。
-
@Pesho_T 谢谢!