V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SystemLight
V2EX  ›  C

使用 cmake 在 windows 平台下编译后运行可执行文件为什么会 提示 `由于找不到 libgio-2.0-0.dll` ?

  •  
  •   SystemLight · 2021-03-11 14:48:30 +08:00 · 2460 次点击
    这是一个创建于 1139 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 在 IDE(CLion)中运行软件一切正常,编译后为什么缺失 dll 呢
    • cmake 难道不能自动把以来 dll 加入进来么
    • 为什么 IDE 中执行文件可以,但是执行编译后 exe 就提示缺少 dll 呢
    • 该如何解决,能否在 cmake 配置项中配置解决
    8 条回复    2021-03-11 19:19:53 +08:00
    pursuer
        1
    pursuer  
       2021-03-11 15:47:12 +08:00
    windows 能不能找到 dll 取决于你的 PATH 环境变量等,cmake 只是在生成的文件中标记用到了这个 dll,但查找是 windows
    pursuer
        2
    pursuer  
       2021-03-11 15:51:32 +08:00
    忘写解决方法了,你可以把 dll 文件夹加入到 PATH 或者把 dll 放到可执行文件目录下试试
    bruce0
        3
    bruce0  
       2021-03-11 15:56:30 +08:00
    linux 可以通过制定 rpath 来指定动态库目录

    Windows 上好像没有这个东西 Windows 上程序会在 path 和.exe 的当前目录找 .dll 文件

    所以可以把需要的 .dll 文件放到 path 目录 或者 .exe 的目录中
    SystemLight
        4
    SystemLight  
    OP
       2021-03-11 16:06:34 +08:00
    @pursuer cmake 可不可以配置将需要的动态链库一起编译打包到应用程序中
    SystemLight
        5
    SystemLight  
    OP
       2021-03-11 16:07:42 +08:00
    @pursuer 是的,加入环境变量是没有问题的,但是问题是程序需要分发到不同主机,每次配置环境变量很麻烦
    SystemLight
        6
    SystemLight  
    OP
       2021-03-11 16:08:35 +08:00
    @bruce0 cmake 有没有功能可以自己复制这个 dll 到程序目录呢
    bruce0
        7
    bruce0  
       2021-03-11 16:49:45 +08:00
    set(LIBRARY_OUTPUT_PATH XXX) 可以设置生成的动态库的目录

    详细的可以看一下这个 https://juejin.cn/post/6936408961050476558
    systemcall
        8
    systemcall  
       2021-03-11 19:19:53 +08:00 via Android
    试试把 DLL 和 exe 放在同一级目录
    可以用静态编译试试,程序会大很多,但是应该就不会报缺 DLL 的错误了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1013 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:45 · PVG 03:45 · LAX 12:45 · JFK 15:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.