错误 LNK1104:无法打开文件“Debug\MyProjectLib.lib”

2023-11-22

我有以下内容CMakeLists.txt文件来生成我的基于Qt的项目:

cmake_minimum_required(VERSION 2.8.12)
project(MyProject)

find_package(Qt5Widgets)

set(MyProjectLib_src ${PROJECT_SOURCE_DIR}/gui.cpp)
set(MyProjectLib_hdr ${PROJECT_SOURCE_DIR}/gui.h)
set(MyProjectLib_ui  ${PROJECT_SOURCE_DIR}/gui.ui)
set(MyProjectBin_src ${PROJECT_SOURCE_DIR}/main.cpp)

qt5_wrap_cpp(MyProjectLib_hdr_moc ${MyProjectLib_hdr})
qt5_wrap_ui (MyProjectLib_ui_moc  ${MyProjectLib_ui})

include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_BINARY_DIR})

add_library(MyProjectLib SHARED 
    ${MyProjectLib_src}
    ${MyProjectLib_hdr_moc}
    ${MyProjectLib_ui_moc}
)
target_link_libraries(MyProjectLib Qt5::Widgets)

add_executable(MyProject ${MyProjectBin_src})
target_link_libraries(MyProject MyProjectLib)

当我尝试编译生成的项目时,出现以下错误:

错误 LNK1104:无法打开文件“Debug\MyProjectLib.lib”

对应目录Debug包含:

MyPtojectLib.dll
MyProjectLib.ilk
MyProjectLib.pdb

你宣布MyProjectLib作为共享库,因此除非导出库的全部或部分符号,否则您将只有一个.dll设计为在运行时加载,并且没有.lib正如您尝试做的那样,在编译时进行链接。

一个快速的解决方案可能是声明MyProjectLib作为静态库:

add_library(MyProjectLib STATIC ...)

另一种选择可能是使用“新”cmake 功能来导出所有符号(请参阅本文):

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

您还可以通过显式声明要导出的符号来使用“传统”方式,例如这个答案(长答案)。您首先需要在代码中的某处声明一些 API 宏:

#ifdef MyProjectLib_EXPORTS
#define MyProjectLib_API __declspec(dllexport)
#else
#define MyProjectLib_API __declspec(dllimport)
#endif

注意MyProjectLib_EXPORTS由 cmake 自动为共享库生成:您不需要关心这一点。然后,对于代码中的每个类,在声明中使用宏:

class MyProjectLib_API MyClass { /* ... */ };

MyClass编译时将是导出的符号MyProjectLib因为MyProjectLib_EXPORTS将被定义,并且 MyProjectLib_API 将扩展为__declspec(dllexport)。所以它将被导出为.lib file.

链接时它将是一个导入的符号MyProjectLib因为MyProjectLib_EXPORTS将是未定义的,并且MyProjectLib_API将扩展到__declspec(dllimport).


您还可以像这样改进您的 cmake 文件:

qt5_wrap_cpp(MyProjectLib_hdr_moc ${MyProjectLib_hdr})
qt5_wrap_ui (MyProjectLib_ui_moc  ${MyProjectLib_ui})

您可以使用AUTOMOC and AUTOUIC相反,让 cmake 自动处理对 Qt 实用程序的调用。

include_directories (${PROJECT_SOURCE_DIR})
include_directories (${PROJECT_BINARY_DIR})

PROJECT_SOURCE_DIR默认情况下是一个包​​含目录,我不明白为什么需要添加PROJECT_BINARY_DIR这里:只需删除这些行。

清理后,您的 cmake 文件可能会变成这样:

cmake_minimum_required(VERSION 2.8.12)
project(MyProject)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5Widgets)

set(MyProjectLib_src
    ${PROJECT_SOURCE_DIR}/gui.cpp
    ${PROJECT_SOURCE_DIR}/gui.h
    ${PROJECT_SOURCE_DIR}/gui.ui
)

add_library(MyProjectLib STATIC
    ${MyProjectLib_src}
)
target_link_libraries(MyProjectLib Qt5::Widgets)

set(MyProjectBin_src ${PROJECT_SOURCE_DIR}/main.cpp)

add_executable(MyProject
    ${MyProjectBin_src}
)
target_link_libraries (MyProject MyProjectLib)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误 LNK1104:无法打开文件“Debug\MyProjectLib.lib” 的相关文章

  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 错误:无法卸载“wrap”。安装tensorflow-gpu时~=1.14

    我正在尝试安装以下版本的 TensorFlow GPU 因为 gitrepo 的作者建议了它here jalal goku examples pip install tensorflow gpu 1 14 Collecting tensor
  • Go 1.6 中的供应

    我已经阅读了尽可能多的文档和 StackOverflow 文章 但我没能使用 Go 1 6 中的新供应商功能进行导入 这是我整理的一个示例项目Goji去测试 目录结构是这样的 src main go vendor github com ze
  • Android - 无法找到与目标“Android 1.6”错误兼容的 AVD

    我第一次尝试运行 Android 版 Hello World 应用程序 但我不断收到 Failed to find an AVD compatible with target Android 1 6 当我尝试创建 AVD 时出错 我已尝试以
  • 为什么 git push origin master 会画 ASCII 艺术? [复制]

    这个问题在这里已经有答案了 当我跑的时候git push origin master 我看到了一张非常不寻常的 ASCII 图片 我跑了git push几百次了 以前从未见过这种情况 有什么解释吗 git push origin maste
  • 换行符或“\n”不起作用。

    你能告诉我为什么换行符 n 不起作用吗 itemsToWriteToFile Number 1 12 nNumber 2 13 nNumber 3 13 nNumber 4 14 itemsToWriteToFile str itemsTo
  • 在 LESS css 中增加一个变量

    如何在 LESS css 中增加变量 这是例子 counter 1 someSelector nameOfClass counter counter counter 1 someSelector nameOfClass counter 上面
  • 使用纯 CSS 隐藏一个元素的列表

    如果列表仅包含一个仅使用 CSS 的元素 是否有一种方法可以隐藏列表 奖励 想想 IE8 ul li hide this li ul But ul li show this li li and others li ul 我正在和所有兄弟姐妹
  • 使用 OpenStreetMap 从 data.frame 绘制点

    我对空间数据完全是新手 我有以下代码成功绘制了有界地图 我想添加 作为 data frame 存储的点 我提前道歉 无法从 OpenStreetMap 文档中弄清楚这一点 代码如下 library OpenStreetMap stores
  • AWS Athena JDBC 准备语句

    我无法使 AWS Athena JDBC 驱动程序与PreparedStatement 和绑定变量一起使用 如果我将所需的列值直接放入 SQL 字符串中 它就可以工作 但如果我使用占位符 我用PreparedStatement的setter
  • 如何在 Tracker 事件中获取 android 人脸检测器的当前帧(作为位图)?

    我有标准的 com google android gms vision Trackerexample在我的 Android 设备上成功运行 现在我需要对图像进行后处理以找到当前脸部的虹膜 该虹膜已在跟踪器的事件方法中通知 那么 如何获得与我
  • 将二进制文件读入 std::vector 而不是 std::vector

    我想读取包含 uint16 t 值的二进制文件 到目前为止我所做的是 std ifstream is std vector
  • Android Manifest 中的 versionCode 与 versionName

    我的应用程序位于 Android 市场 版本代码 2 版本名称 1 1 然而 今天更新时 我在清单中更改了版本代码 3 但错误地将版本名称更改为1 0 1并将apk上传到市场 现在 我的应用程序的用户会在手机上收到更新通知吗 或者我应该重做
  • 尝试在 golang 中获取有截止日期的锁?

    如何才能在 go 中只尝试获取类似互斥锁的锁 要么立即中止 例如TryLock在其他实现中确实如此 或通过遵守某种形式的截止日期 基本上锁定之前 我现在可以想到两种情况 这将非常有帮助 并且我正在寻找某种解决方案 第一个是 CPU 密集型服
  • 如何制作良好的可重现的 pandas 示例

    花了相当多的时间观看了这两部作品r and pandasSO 上的标签 我得到的印象是pandas问题不太可能包含可重复的数据 这是 R 社区非常鼓励的事情 并且感谢像这样的指南this 新手可以在整理这些示例时获得一些帮助 能够阅读这些指
  • 在具有多列的material-ui表上添加水平滚动的方法是什么?

    我跟随这个表的例子对于 React Material UI 框架 我正在寻找一种可能性 当我有很多列时 使我的表格可以水平滚动 例如 我有许多列被挤压以适应页面宽度 因此它们的内容被缩短 我认为它在材料用户界面规范中通过链接进行了描述显示完
  • 突然禁止访问

    从今天早上开始 我们所有使用 DialogFlow 的 ChatBot 都被拒绝 响应代码为 403 和以下 JSON status code 401 errorType unauthorized errorDetails You are
  • OSX 上的 libxml2 和 libxml2-dev

    当尝试构建 Unix QuickFIX 引擎时 我在 bootstrap 之后收到以下错误 warning macro AM PATH XML2 not found in library 据我了解 libxml2 已经随 XCode OS
  • 在delphi中将十六进制字符串转换为十进制值

    我在使用 Delphi 将十六进制值的字符串表示形式转换为整数值时遇到问题 例如 FC75B6A9D025CB16 当我使用该功能时给我 802829546 Abs StrToInt64 FC75B6A9D025CB16 但如果我使用Win
  • 如何在线性时间内计算最小瓶颈生成树?

    利用克鲁斯卡尔算法 我们可以在最坏情况下以 O E log V 找到最小瓶颈生成树 这是因为每个最小生成树都是最小瓶颈生成树 但我被这个求职面试问题困住了this course 即使在最坏的情况下 我们如何在线性时间内找到最小瓶颈生成树 请
  • 错误 LNK1104:无法打开文件“Debug\MyProjectLib.lib”

    我有以下内容CMakeLists txt文件来生成我的基于Qt的项目 cmake minimum required VERSION 2 8 12 project MyProject find package Qt5Widgets set M