【问题标题】:(C) How to link dlls within CLion(C) 如何在 CLion 中链接 dll
【发布时间】:2021-01-02 02:27:54
【问题描述】:

我用 Visual Studio 编写 C 语言已有一段时间了,但现在改用 CLion。我的编程和目标系统是Windows10。

在 Visual Studio 中,我能够在我的 exe 中包含所需的 DLL,例如“vcruntime140d.dll”和“ucrtbased.dll”。

我通过进入项目设置并将configuration settings - C/C++ - code generation - runtime library 设置为“多线程调试(/MTd)”来做到这一点。 这样做我能够运行生成的 exe,而不会出现“vcruntime140d.dll is missing”或“ucrtbased.dll is missing”等错误。

但是如何在 CLion 中实现这一点?

我已经搜索了一段时间,找到了很多关于如何包含 .lib 文件但不包含 DLL 的教程(我没有相关代码)。

【问题讨论】:

  • 您在 CLion 中使用哪个编译器?微软?选项仍然是/MTd,如果你想使用调试运行时.. GCC,Clang,还有别的吗?您正在寻找的选项将是“静态链接运行时”或类似的,例如-static 至少用于 GCC 中的链接步骤,如果不是 Clang 也是如此。或者您可以切换到使用发布运行时,通常每个人都已经安装了。

标签: c dll clion


【解决方案1】:

使用 Clion,您实际上是在使用 CMake。所以问题是如何在 CMake 中链接 dll。

有很多方法可以做。例如

如果默认找不到库,使用find_library搜索。

如果您觉得这些功能太陌生,请查看 CLion 团队的this tutorial

更新

正如您所问的评论,似乎真正的问题是加载一个 没有 lib 的 dll。要解决这个问题,您可以dynamicly load the dllmake a lib from the dll

对于 Windows 多副本问题,将以下内容添加到您的 CMakeLists.txt

foreach (flag_var
      CMAKE_C_LINK_FLAGS
      CMAKE_C_LINK_FLAGS_DEBUG
      CMAKE_C_LINK_FLAGS_RELEASE
      CMAKE_CXX_LINK_FLAGS
      CMAKE_CXX_LINK_FLAGS_DEBUG
      CMAKE_CXX_LINK_FLAGS_RELEASE
      CMAKE_EXE_LINKER_FLAGS
      CMAKE_EXE_LINKER_FLAGS_DEBUG
      CMAKE_EXE_LINKER_FLAGS_RELEASE
      CMAKE_C_FLAGS
      CMAKE_C_FLAGS_DEBUG
      CMAKE_C_FLAGS_RELEASE
      CMAKE_C_FLAGS_MINSIZEREL
      CMAKE_C_FLAGS_RELWITHDEBINFO
      CMAKE_CXX_FLAGS
      CMAKE_CXX_FLAGS_DEBUG
      CMAKE_CXX_FLAGS_RELEASE
      CMAKE_CXX_FLAGS_MINSIZEREL
      CMAKE_CXX_FLAGS_RELWITHDEBINFO)
  string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}")
endforeach ()

【讨论】:

猜你喜欢
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 2018-08-04
  • 2018-05-25
相关资源
最近更新 更多