undefined reference to `ts_read_raw'

作者在参加博创杯比赛过程中遇到QT移植问题,编译完成后出现未定义引用错误。通过修改qmake.conf文件并加入lts参数解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           最近几天为毕业的事情搞到焦头烂额~~越到毕业越发现学校的可爱和可恨之处啊!

           第二次参加博创杯··好久没碰博创的板了,实在是太烂了····改个文件系统都麻烦~今天重新移植了个QT,发现有个问题,记录一下~

编译qt完成后,随便编译一个自带的例子~make时候提示以下错误,用友善的东西时候都没出现这个~郁闷~

 

lib/libQtGui.so: undefined reference to `ts_read_raw'

/lib/libQtGui.so: undefined reference to `ts_open'

/lib/libQtGui.so: undefined reference to `ts_fd'

/lib/libQtGui.so: undefined reference to `ts_config'

/lib/libQtGui.so: undefined reference to `ts_close'

/lib/libQtGui.so: undefined reference to `ts_read

 

解决办法:

'修改qt-everywhere-opensource-src-4.7.2/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加lts参数):

QMAKE_CC                = arm-linux-gcc -lts

QMAKE_CXX               = arm-linux-g++ -lts

QMAKE_LINK              = arm-linux-g++ -lts

QMAKE_LINK_SHLIB        = arm-linux-g++ -lts

 

 

在嵌入式开发或其他低级系统编程中,当遇到类似 `undefined reference to '_close'` 这样的链接错误时,通常是因为你的程序尝试调用了某些标准库函数(如 `_close`, `_fstat`, `_isatty`, `_lseek`, `_read`),但这些函数未被正确实现或映射到目标平台。 ### 原因分析 这些问题常出现在跨平台开发、裸机环境、操作系统模拟等场景下。例如,在使用 GNU 工具链编译针对特定硬件的目标文件时,默认的标准库可能无法直接支持所有功能。尤其是当你试图将串口作为标准输入/输出设备重定向时: 1. **标准I/O库依赖**:像 `_close`, `_fstat`, 等底层操作符由 C 标准库提供默认实现,但在非 POSIX 兼容环境中(比如单片机或 RTOS),这些函数需要自定义实现。 2. **缺乏移植层**:如果目标平台上缺少对上述系统的实际支持,则必须通过编写 stub 函数来覆盖掉它们的行为,并按照需求定制化处理。 3. **链接阶段问题**:有时也可能由于配置不当导致正确的运行时库未能成功加载进项目构建流程内。 ### 解决方案 #### 一、为缺失的功能添加简单的Stub版本 对于不需要完整功能的情况可以简单返回固定值: ```c int _close(int file) { return -1; } int _fstat(int file, struct stat *st) { st->st_mode = S_IFCHR; return 0; } int _isatty(int file) { return 1;} off_t _lseek(int file, off_t ptr, int dir){return 0;} ssize_t _read(int file,char *ptr,size_t len){ // 实现从串口中读取数据逻辑... return some_serial_read_function(ptr,len); } ``` #### 二、修改Makefile或者IDE设置确保包含适当的Runtime Library 检查并确认是否已经包含了适合当前体系结构的CRT (C Run-Time) 库路径及选项. #### 三、利用专门工具生成所需的weak symbol definitions 一些高级交叉编译器能够自动为我们产生基本的弱符号定义模板,然后用户只需补充必要的部分即可完成整个过程. 以上步骤应该可以帮助解决大部分此类链接失败的问题了!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值