【问题标题】:LNK1104 error with example CMake project in Visual Studio 2017Visual Studio 2017 中的示例 CMake 项目出现 LNK1104 错误
【发布时间】:2017-03-10 09:26:46
【问题描述】:

我决定尝试 VS2017 中的内置 CMake 支持,而不是弄清楚为什么我们的多库、多可执行项目在它使用的手工制作的 CMakeLists.txt 文件中存在 find_package 问题多年来,我决定先尝试一个简单的项目,来自 CMake wiki 的 FooBar 示例:https://cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file

这个项目创建了一个共享库 foo 和一个链接到这个库的可执行 bar,并且非常简单。我解压了项目,用File->Open->Folder打开它,CMake配置启动并成功。我注意到的第一件事是没有更多的 Build 菜单,没有 F7 快捷方式来构建我的项目,而是我必须选择 CMake->Build CMakeLists.txt :-( Debug 菜单同样受阻,快速调试是我使用 Visual Studio 的原因第一名。这已经看起来很糟糕,但情况变得更糟:

构建失败,输出如下:

foo.vcxproj -> C:\Users\Enno\AppData\Local\CMakeBuild\639e9ecd-8891-eb38-b26b-ce84aa448eea\build\x86-Debug\foo\Debug\foo.dll
C:\Users\Enno\AppData\Local\CMakeBuild\639e9ecd-8891-eb38-b26b-ce84aa448eea\build\x86-Debug\bar\LINK : fatal error LNK1104: cannot open file '..\foo\Debug\foo.lib' 

想法:

  1. 构建目录在 %APPDATA% 中?这会很烦人。
  2. 该位置确实没有 .lib 文件,只有 .dll。

此时我开始怀疑这可能不是 VS2017 的问题,但可能是示例项目本身或 CMake 的问题。所以我用cmake.exe -G "Visual Studio 14" .为VS2015创建了一个解决方案,我在VS2015中打开了,瞧!我收到了同样的错误信息。

有没有关于 SO 的 CMake 天才可以告诉我这个项目有什么问题?

【问题讨论】:

标签: visual-studio cmake


【解决方案1】:

原来:CMake wiki 上的示例首先是不可移植的,因此这与 Visual Studio 的内置 CMake 支持无关。它没有考虑到 Windows 需要 DLL 的导出库。将正确的 __declspec(dllexport) 咒语添加到 foo.h 可以解决错误消息。

我在此链接中找到了我需要的有关 Windows 上共享库的所有信息: http://gernotklingler.com/blog/creating-using-shared-libraries-different-compilers-different-operating-systems/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多