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

使用Sunix TTY驱动编译报dp_lib_init未定义引用错误如何解决

问题解决步骤

1. 修正编译命令的参数顺序

gcc/g++ 链接时遵循依赖方在前,被依赖方在后的规则,你当前的写法把-lsdxio放在源文件main.cpp之前,链接器处理库文件时还未扫描到main.cpp中对dp_lib_init的引用,不会主动导出库中的对应符号,最终导致找不到定义。
你写的g++ -L-lsdxio main.cpp属于无效参数,-L后必须跟库路径,可直接忽略该写法。

正确的编译命令为:

g++ main.cpp -L/usr/lib -lsdxio

2. 解决C/C++符号名修饰不匹配问题

你使用的libsdxio.so是C语言编译的动态库,导出的符号是纯C格式的dp_lib_init,而你用C编译main.cpp时,如果头文件未做C兼容声明,C编译器会对函数名做名字修饰(Name Mangling),生成类似_Z11dp_lib_initv的修饰后符号,和库中的C格式符号无法匹配。

解决方法:修改main.cpp中头文件的引用逻辑,用extern "C"包裹C库的头文件,告知编译器这部分函数使用C语言的符号规则:

#include <iostream>
extern "C" {
#include "sdxmng.h"
#include "sdxsio.h"
}

int main()
{
    dp_lib_init();
    return 0;
}

可选排查项

如果修改后仍有问题,可额外检查两个点:

  • 执行sudo ldconfig刷新系统动态库缓存,确保系统能识别/usr/lib下的libsdxio.so;如果库文件软链接异常,可手动重建:sudo ln -sf /usr/lib/libsdxio.so.9 /usr/lib/libsdxio.so
  • 执行file /usr/lib/libsdxio.so确认库架构和你的编译目标架构一致,避免出现32位库链接到64位程序的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:36:04