You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在macOS的Qt QMake项目中使用libnfc?链接错误排查

解决Qt QMake项目链接libnfc的问题

1. 先处理架构不兼容问题

警告明确显示libnfc.6.dylib是arm64架构,但你的Qt项目需要x86_64架构,这是核心矛盾之一。

方案1:重新编译libnfc为x86_64架构

从GitHub拉取libnfc源码后,编译时指定目标架构:

cd libnfc
mkdir build && cd build
cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 ..
make
sudo make install

方案2:用brew安装适配x86_64的libnfc

  • 若你的Mac是Intel芯片,直接执行:
    brew install libnfc
    
  • 若你的Mac是M系列芯片,但Qt在Rosetta下以x86_64模式运行,需打开x86_64终端再安装:
    arch -x86_64 zsh
    arch -x86_64 brew install libnfc
    

2. 修复C++调用C库的符号匹配问题

libnfc是纯C库,C++编译器会对函数名做名称修饰,导致链接时找不到C库的原始符号。需在引用libnfc头文件时用extern "C"包裹:

修改main.cpp的头文件部分:

#include "mainwindow.h"
#include <QApplication>

extern "C" {
#include <nfc/nfc.h>
}

int main(int argc, char *argv[])
{
    printf("TEST");
    const char *acLibnfcVersion = nfc_version();
    printf("%s uses libnfc %s\n", argv[0], acLibnfcVersion);

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

3. 优化Qt .pro文件配置

确保库路径和链接参数正确,建议更新为:

INCLUDEPATH += /usr/local/include
LIBS += -L/usr/local/lib -lnfc
# 强制指定编译架构与libnfc一致
QMAKE_APPLE_DEVICE_ARCHS = x86_64

如果是brew安装的libnfc,可通过brew --prefix libnfc命令获取实际安装路径,替换到上述配置中。

验证操作

  1. 清理Qt项目:点击Qt Creator的Build > Clean All
  2. 重新构建项目:Build > Rebuild All
  3. 运行项目,检查链接错误和架构警告是否消失

内容的提问来源于stack exchange,提问作者Soren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:56:17