XMake构建Qt项目报错“undefined reference”

xmake版本:xmake v2.8.5+master.8865866a4

Qt版本:5.14.2

编译器版本:Qt安装自带的MinGW 7.3 64

平台:Windows11(注意在Windows上qt的mingw只提供release版本的库链接,所以只能够构建到release版本)

xmake.lua

set_project("softchat")

add_rules("mode.debug", "mode.release")

target("client")

    add_rules("qt.widgetapp")
    add_frameworks("QtWebSockets")
    add_files("client/**.cpp", "client/**.h")
    add_includedirs("client", "client/gui")

    if is_mode("debug") then
        add_defines("DEBUG")
    elseif is_mode("release") then
        add_defines("RELEASE")
    end

target_end()

target("server")

    add_rules("qt.console")
    add_files("server/**.cpp", "server/**.h")
    add_frameworks("QtWebSockets", "QtSql")

    if is_mode("debug") then
        add_defines("DEBUG")
    elseif is_mode("release") then
        add_defines("RELEASE")
    end

target_end()

构建之后报错:

error: build\.objs\server\mingw\x86_64\release\server\server.cpp.obj:server.cpp:(.text+0x2a6): undefined reference to `__imp__ZN12QHostAddressC1ENS_14SpecialAddressE'
build\.objs\server\mingw\x86_64\release\server\server.cpp.obj:server.cpp:(.text+0x2c6): undefined reference to `__imp__ZN12QHostAddressD1Ev'
build\.objs\server\mingw\x86_64\release\server\server.cpp.obj:server.cpp:(.text+0x4be): undefined reference to `__imp__ZN12QHostAddressD1Ev'
build\.objs\server\mingw\x86_64\release\server\server.cpp.obj:server.cpp:(.text+0x10ef): undefined reference to `__imp__ZNK12QHostAddress8toStringEv'
build\.objs\server\mingw\x86_64\release\server\server.cpp.obj:server.cpp:(.text+0x1248): undefined reference to `__imp__ZN12QHostAddressD1Ev'
build\.objs\server\mingw\x86_64\release\server\server.cpp.obj:server.cpp:(.text+0x1373): undefined reference to `__imp__ZN12QHostAddressD1Ev'
collect2.exe: error: ld returned 1 exit status

项目结构什么的都不用注意,关键是这个项目用到了模块QtWebSockets。

报错信息大概说的是存在未定义的符号,在链接阶段出了问题。

一开始百思不得其解,后来看到报错信息里有QHostAddress,网上一查说是提供一个IP地址的Qt封装,随即联想到这或许和QtNetwork有关,然后把QtNetwork库链接到目标之中,果然就没有报错了。

正确的xmake.lua

set_project("softchat")

add_rules("mode.debug", "mode.release")

target("client")

    add_rules("qt.widgetapp")
    add_frameworks("QtNetwork", "QtWebSockets")
    add_files("client/**.cpp", "client/**.h")
    add_includedirs("client", "client/gui")

    if is_mode("debug") then
        add_defines("DEBUG")
    elseif is_mode("release") then
        add_defines("RELEASE")
    end

target_end()

target("server")

    add_rules("qt.console")
    add_files("server/**.cpp", "server/**.h")
    add_frameworks("QtNetwork", "QtWebSockets", "QtSql")

    if is_mode("debug") then
        add_defines("DEBUG")
    elseif is_mode("release") then
        add_defines("RELEASE")
    end

target_end()

回头仔细想想,确实也是如此,作为Qt基础库的QtNetwork和作为扩展库的QtWebSockets,后者也应该是在前者的基础上开发的,因此,要想在Qt中使用任何和网络有关的库,需要先添加QtNetwork模块。

但另一个方面,同样的链接模块,cmake就可以顺利构建,想来是cmake底下偷偷帮你链接QtNetwork了。

相关推荐

  1. XMake构建Qt项目“undefined reference”

    2023-12-09 23:30:04       61 阅读
  2. Qt项目打包

    2023-12-09 23:30:04       28 阅读
  3. qt QtMultimedia

    2023-12-09 23:30:04       45 阅读
  4. [xmake]构建静态库和动态库

    2023-12-09 23:30:04       29 阅读
  5. QT 常见解决记录

    2023-12-09 23:30:04       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 23:30:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 23:30:04       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 23:30:04       87 阅读
  4. Python语言-面向对象

    2023-12-09 23:30:04       96 阅读

热门阅读

  1. TensorFlow的介绍

    2023-12-09 23:30:04       51 阅读
  2. Python处理Excel文件并与数据库匹配做拼接

    2023-12-09 23:30:04       46 阅读
  3. 单片机中的printf思考

    2023-12-09 23:30:04       59 阅读
  4. 分享一个用C#写的Aspose.Words生成word的工具类

    2023-12-09 23:30:04       45 阅读
  5. c语言编程题经典100例——(90~95例)

    2023-12-09 23:30:04       52 阅读
  6. [动态规划]最长公共子序列

    2023-12-09 23:30:04       51 阅读
  7. 从Android源码中生成系统签名文件

    2023-12-09 23:30:04       55 阅读
  8. 面向无组织点云中快速鲁棒的边缘提取方法

    2023-12-09 23:30:04       53 阅读
  9. 考研真题数据结构

    2023-12-09 23:30:04       53 阅读
  10. Centos7安装docker支持NVIDIA GPU

    2023-12-09 23:30:04       49 阅读
  11. 反向传播算法

    2023-12-09 23:30:04       52 阅读
  12. 《C++新经典设计模式》之第18章 备忘录模式

    2023-12-09 23:30:04       61 阅读
  13. 考研真题数据结构

    2023-12-09 23:30:04       53 阅读
  14. 数据科学:Scipy、Scikit-Learn笔记

    2023-12-09 23:30:04       56 阅读
  15. Kotlin关键字二——constructor和init

    2023-12-09 23:30:04       64 阅读
  16. python中星号(*)的作用

    2023-12-09 23:30:04       56 阅读