【问题标题】:What is the proper way to link CMake based project in Windows?在 Windows 中链接基于 CMake 的项目的正确方法是什么?
【发布时间】:2012-10-27 16:00:16
【问题描述】:

最后,经过一整天的工作,我已经制作了基于 CMake 的项目,可以在 Windows 上成功编译项目(我一直在 Linux 上开发它),它甚至可以很好地链接在一起,不是吗?现在我启动程序并繁荣,它无法找到 dll 库。

所以,问题:

我有 CMake 项目,其中包含库和可执行文件,该可执行文件正在使用项目的库。我在项目中也有许多第三方库。它可以很好地编译和链接。当我尝试启动它时,它会打印找不到项目库的错误。我已将其复制到可执行文件的目录中。现在它打印出没有找到第 3 方库,我已将它们全部复制到 exe 的目录中。现在它打印出 gcc 的库未找到,所以我已将 C:\MinGW\bin 添加到路径中,现在它可以正常启动了。

但我觉得这不是正确的方法。我想让我的队友(新)免于发射时的痛苦。

【问题讨论】:

    标签: dll linker cmake mingw


    【解决方案1】:

    要么静态链接所有内容,要么将必要的install() 调用添加到您的 CMakeLists.txt 中。将所有需要的库安装到同一目录并从那里运行可执行文件。

    如果你想从 CMAKE_BINARY_DIR 运行可执行文件,你可以

    set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
    set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
    set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
    

    这将使 CMake 将链接的二进制文件放入同一目录中。

    至于 gcc 运行时 - 除了复制 dll 或静态链接之外别无他法。

    【讨论】:

    • 在 Windows 上没有 RPATH 的东西,AFAIK。
    • 我认为 CMake 应该在这种情况下提供任何帮助,因为当我尝试将这个项目与 Qt Creator 一起使用时,它不会启动。所以 CMake 生成器应该告诉如何启动程序
    • CMake 不会将 .dll 和可执行文件放在同一个文件夹中,除非您告诉它这样做。
    猜你喜欢
    • 2015-09-10
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多