Qt 和 CMake 因重复符号而失败

2024-03-30

我的 c++/qt 项目中有 3 个文件,并且我正在使用 CMake。我正在尝试编译它这里有一些代码:

CMakeLists 包含:

cmake_minimum_required(VERSION 3.8)
project(untitled)

set(CMAKE_CXX_STANDARD 14)

set(CMAKE_PREFIX_PATH /Users/username/Qt/5.9.2/clang_64/)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

find_package(Qt5Core)
find_package(Qt5Network)

set(SOURCE_FILES main.cpp server.cpp)

add_executable(untitled ${SOURCE_FILES})

target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} Qt5::Network)

Main.cpp 包含:

#include <iostream>
#include <QCoreApplication>
#include <QtDebug>
#include "server.cpp"

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    MyTcpServer server;
    return app.exec();
}

最后 server.cpp 包含:

#include <QObject>
#include <QTcpSocket>
#include <QTcpServer>
#include "server.moc"

class MyTcpServer : public QObject
{
Q_OBJECT
public:
    explicit MyTcpServer(QObject *parent = 0);

public slots:
    void slotNewConnection();
    void slotServerRead();
    void slotClientDisconnected();

private:
    QTcpServer * mTcpServer;
    QTcpSocket * mTcpSocket;
};

MyTcpServer::MyTcpServer(QObject *parent) : QObject(parent)
{
  ...
}

void MyTcpServer::slotNewConnection()
{
  ...
}

void MyTcpServer::slotServerRead()
{
  ...
}

void MyTcpServer::slotClientDisconnected()
{
    mTcpSocket->close();
}

我正在尝试使用 CMake 编译我的项目,当我运行 CMake 时,我遇到了以下问题:

duplicate symbol __ZN11MyTcpServer18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv in:
    CMakeFiles/untitled.dir/main.cpp.o
    CMakeFiles/untitled.dir/server.cpp.o
                      ...
duplicate symbol __ZN11MyTcpServer16staticMetaObjectE in:
    CMakeFiles/untitled.dir/main.cpp.o
    CMakeFiles/untitled.dir/server.cpp.o
ld: 13 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

告诉我有重复的符号。 如何解决这个问题?


最好不要使用#include for .cpp文件。将定义和声明拆分到不同的文件中是一种很好的做法。

(其中一个例外是 PIMPL 模式下的私有声明。)

如果您想避免拆分,因为您只有小段代码,请使用头文件并在类的定义中实现您的方法。

如果实现了库:请勿安装头文件,以防您的类无法从外部访问。

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

Qt 和 CMake 因重复符号而失败 的相关文章

  • 如何将包含 5000 条记录的 Excel 文件插入到 documentDB 中?

    我有一个 Excel 文件 最初约有 200 行 我能够将 Excel 文件转换为数据表 并且所有内容都正确插入到 documentdb 中 Excel 文件现在有 5000 行 在插入 30 40 条记录后不会插入 其余所有行不会插入到
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 使用API​​隐藏程序标题栏

    它可以使用 c 和 windows api 删除窗口控制台标题栏 如果是的话如何 请 这个简单的应用程序隐藏并显示其所在控制台的标题栏 它会立即将控制台标题更改为 guid 以查找窗口句柄 然后 它使用 ToggleTitleBar 使用找
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • 从 future 中检索值时的 SIGABRT

    我在使用 C 11 future 时遇到问题 当我打电话时wait or get 关于返回的未来std async 程序接收从mutex标头 可能是什么问题呢 如何修复它 我在 Linux 上使用 g 4 6 将以下代码粘贴到 ideone
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 如何在 Asp.net Gridview 列中添加复选框单击事件

    我在 asp 中有一个 gridview 其中我添加了第一列作为复选框列 现在我想选择此列并获取该行的 id 值 但我不知道该怎么做 这是我的 Aspx 代码
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

    我将自己的 WCF 代理与 Client Base 一起使用 我想做一些类似于 svc util 中的 ct 属性的操作 并告诉代理返回 List 集合类型 我不能使用 List 因为实体由 nhibernate 管理 所以我必须使用 IL
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • 使用(linq to sql)更新错误

    我有两个表 通过外键 CarrierID 绑定 Carrier CarrierID CarrierName CarrierID 1 CarrierName DHL CarrierID 2 CarrierName Fedex Vendor V
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • 如何访问窗口?

    我正在尝试使用其句柄访问特定窗口 即System IntPtr value Getting the process of Visual Studio program var process Process GetProcessesByNam
  • “int i=1,2,3”和“int i=(1,2,3)”之间的区别 - 使用逗号运算符的变量声明[重复]

    这个问题在这里已经有答案了 int i 1 2 3 int i 1 2 3 int i i 1 2 3 这些说法有什么区别 我无法找出任何具体原因 Statement 1 Result Compile error 运算符的优先级高于 运算符
  • 纯虚函数可能没有内联定义。为什么?

    纯虚函数是那些虚函数并且具有纯说明符 0 第 10 4 条第 2 款C 03 的内容告诉我们什么是抽象类 顺便说一句 如下 注意 函数声明不能 同时提供纯说明符和定义 尾注 示例 struct C virtual void f 0 ill
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个

随机推荐

  • 将数据从VSS迁移到SVN

    如何将我的数据从 VSS 迁移到 SubVersion 这取决于您是否想随身携带 VSS 元数据 如果是 请看一下电源管理员 http www poweradmin com sourcecode vssmigrate aspx or Vss
  • 版本号大于 1.18.10 的正则表达式 [重复]

    这个问题在这里已经有答案了 我需要验证应用程序的版本号是否大于 1 18 10 在这种情况下 正则表达式应该是什么样子 不要为此使用正则表达式 使用split and tuple比较 def is recent version versio
  • 将点击事件与 Twitter Bootstrap 结合使用

    我正在使用 twitter bootstrap 开发一个可以在多个设备上呈现的 Web 应用程序 现在我想处理 点击 事件 所以我的问题是 我可以使用 jquery 1 7 2 处理 tap 事件而不使用 jquery Mobile 吗 如
  • minikube docker-env 是什么意思?

    在 Kubernetes 中minikube 教程 https kubernetes io docs tutorials hello minikube create your node js application有这个命令可以使用 Min
  • 如何在批处理脚本中找到应用程序的完整路径

    如何在批处理脚本中找到应用程序 XYZ 如果已安装 的完整路径 澄清 应用程序不在 PATH 中 我所拥有的就是它的名称 在本例中为 ISTool exe 我想得到C 程序 ISTool ISTool exe 您可以在路径 或其他类似路径的
  • 在类本身内部创建类实例是如何工作的?

    是什么使得在类本身内部创建类的实例成为可能 public class My Class My Class new class new My Class 我知道这是可能的 并且自己也做到了 但我仍然无法让自己相信这不是 谁先有鸡还是先有蛋 之
  • 中使用自定义模板名称

    目前我有这段代码 它为每个用户节点调用 用户 模板
  • 如何在没有 Root 设备的情况下使用自己的 Android 服务进行屏幕截图?

    我进行了很多搜索并找到了两个库 1 https code google com p android screenshot library https code google com p android screenshot library
  • 如何使用elasticsearch正确处理多词同义词扩展?

    我有以下同义词扩展 suco gt suco refresco bebida de soja 我想要的是以这种方式标记搜索 搜索 suco de laranja 将被标记为 suco laranja refresco bebida de s
  • 在 ggplot 或lattice 中利用 Surv 对象

    有人知道如何利用 ggplot 或lattice 进行生存分析吗 制作网格或类似面的生存图会很好 所以最后我尝试了一下 找到了卡普兰 迈耶图的解决方案 对于将列表元素放入数据框中的混乱代码 我深表歉意 但我无法找到其他方法 注意 它仅适用于
  • Jenkins Git 插件包含不工作的区域

    我无法使用 Git 插件在 Jenkins 中使用 包含区域 功能 我希望仅在 他的 目录发生更改时才构建作业 示例 项目 mytool 仅应在以下内容发生更改时构建GIT ROOT tools mytool 我在包含的区域字段中尝试了几种
  • 删除默认标题栏

    如何删除 Android 应用程序中默认的顶部标题栏 灰色的你好 Android 吧 删除标题栏非常简单 只需将 android theme 属性添加到 AndroidManifest xml 中即可
  • ICollection 的简单现有实现

    有没有简单的实现ICollection
  • AngularJS 指令中的 locals 代表什么

    AFAIK 这没有记录 但我在角度源中发现locals指令示例中的属性 angular module transclude directive pane function return restrict E transclude true
  • 如何使用已安装的斜纹登录网站?

    我刚刚安装成功TWILL https web archive org web 20180904160747 http twill idyll org 80 在 StackOverflow 一位非常支持的成员的帮助下在我的计算机上 你可以查看
  • 通用协方差和转换为 SuperType

    我有一个面向对象的问题 我认为它可以与通用协方差联系起来 我正在尝试构建一个模块化系统来导入不同类型的记录 模块包含常用方法 SalesModule 包含处理特定逻辑的函数 public interface IImportable void
  • 克隆 jQuery UI 日期选择器时出现问题

    我有一个 div 其中有一个日期选择器 我用这样的东西来克隆它 mydiv someDiv works fine so far mydiv find input datefield datepicker clone without the
  • C#BackgroundWorker 的文化

    我想为我的整个应用程序设置文化 我尝试了以下操作 Thread CurrentThread CurrentCulture CultureInfo CreateSpecificCulture wantedCulture Thread Curr
  • 浏览器之间盒子模型的不同解释

    我注意到浏览器之间在宽度方面存在差异TH标签被解释 特别是宽度计算中是否包含填充 我正在构建一个可重用的库 用于快速生成表格和设计表格样式 当然 对于表格数据 这意味着我可以完全控制我生成的代码 但我需要实际解决问题而不是为特定实例寻找黑客
  • Qt 和 CMake 因重复符号而失败

    我的 c qt 项目中有 3 个文件 并且我正在使用 CMake 我正在尝试编译它这里有一些代码 CMakeLists 包含 cmake minimum required VERSION 3 8 project untitled set C