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

交叉编译Go程序至ARM设备时链接自定义libnfc库失败求助

解决Go程序交叉编译ARM时libnfc链接失败问题

问题根源

链接器ld找不到-lnfc是因为当前目录下只有带版本号的库文件libnfc.so.5.0.1,但链接器查找-lxxx时会优先寻找libxxx.so的软链接或文件,同时编译时需要正确设置运行时库搜索路径。

解决步骤

1. 创建符合链接器要求的软链接

在项目目录下执行以下命令,为libnfc库创建标准命名的软链接:

ln -s libnfc.so.5.0.1 libnfc.so.5
ln -s libnfc.so.5 libnfc.so

执行后,目录下会新增两个软链接:

  • libnfc.so.5 -> libnfc.so.5.0.1
  • libnfc.so -> libnfc.so.5

2. 修改编译脚本build.sh

更新CGO_LDFLAGS,同时指定库搜索路径和运行时库路径:

#!/bin/bash

clear
export CC=arm-linux-gnueabihf-gcc
export CGO_ENABLED=1
export GOOS=linux
export GOARCH=arm
# -L指定当前目录为库搜索路径,-Wl,-rpath=$ORIGIN设置运行时从程序所在目录找库
export CGO_LDFLAGS="-L$(pwd) -Wl,-rpath=\$ORIGIN -lnfc"

go build -ldflags "-s -w"

解释

  • 软链接:链接器处理-lnfc参数时,会自动查找libnfc.so文件,创建软链接后才能让链接器识别到目标库。
  • -Wl,-rpath=$ORIGIN:告诉链接器,程序运行时会从自身所在目录加载依赖库,确保部署到ARM设备时,只要程序和libnfc库文件在同一目录就能正常运行。
  • 重新运行./build.sh即可完成交叉编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:17:06