gpt4 book ai didi

c++ - 使用CMake创建可以在其他计算机上独立运行的可执行文件

转载 作者:行者123 更新时间:2023-12-02 10:35:57 51 4
gpt4 key购买 nike

我将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文件并将其发送给用户。

最佳答案

就像说的另一个答案一样,您需要在可执行文件中链接Torch和OpenCV的静态库。

为此,需要满足一些先决条件:

  • 这两个库需要在系统上安装静态(.a)库。如果没有,您可能必须手动构建它们。不同软件包之间的步骤有所不同。
  • 您需要告诉CMake仅搜索静态库。这是通过CMAKE_FIND_LIBRARY_SUFFIXES变量完成的。默认的机会是.so;.a,这意味着它将首先找到共享库。
  • set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")

    您在 target_link_libraries命令中使用变量而不是 imported libraries(现代CMake方法)的事实使我认为这已经足够-这些变量应扩展为静态库的完整路径,然后应将其添加到您的链接器命令。

    如果使用导入的目标,则要解释的事情要复杂一些,但这可能超出此问题的范围。

    尝试一下,让我们知道您的生活。

    关于c++ - 使用CMake创建可以在其他计算机上独立运行的可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60278090/

    51 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com