分享在sylixos上c++代码应用运行报找不到symbol的经历

本文介绍在SylixOS上使用C++编写动态库时遇到的问题:因未正确包含头文件导致动态库接口未被导出,从而在调用时出现找不到符号的错误。通过调整文件包含顺序解决问题。

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

分享一次在sylixos上编译c++代码库的踩坑经历

前言

最近在sylixos上,使用c++编写动态库,导出相应接口给c/c++使用,在某些头文件包含不对的情况,导致动态库中的函数没有导出相应的接口,c/c++使用动态库接口时,应用运行起来报"can not find symbol:xxxx"问题。

c++工程代码说明

首先我们先使用Real Evo-IDE新建一个c++ app工程,工程中包含3个文件,如图:
在这里插入图片描述
其中
libtest.h为测试动态库头文件;
在这里插入图片描述
libtest.h中已经增加extern "C"导出相应的接口。

libtest.cpp为测试动态库实现代码(为了演示复现错误,本次将动态库文件和应用文件一起编译成一个app);
在这里插入图片描述
libtest.cpp没有#include “libtest.h”

app_c++test.cpp为应用程序
在这里插入图片描述
app_c++test.cpp主要是包含libtest.h头文件,并调用其void libtest_func()方法。

编译与运行

点击编译,可以看到程序编译成功。
在这里插入图片描述
此时我们上传到测试板卡中。
在这里插入图片描述
在板卡终端命令行中运行此程序,运行程序时系统报错,报“/apps/app_c++test/app_c++test can not find symbol: libtest_func”,及找不到libtest_func函数的符号。
在这里插入图片描述

找不到符号的原因

为什么编译的时候,libtest.h头文件已经增加了extern "C"导出接口,且app_c++test.cpp也包含了libtest.h文件,而且libtest.cpp也已经实现了这个方法,并且整个编译过程没有错误发生,最终程序运行时仍然报找不到符号呢。
问题就出现在libtest.cpp没有包含libtest.h,导致编译时编译器不知道该文件应该以c++代码方式编译,__cplusplus宏才可以生效,将libtest.cpp增加libtest.h文件夹包含进来,如下图,再重新编译。
在这里插入图片描述
编译完成后,再将程序上传到板卡中,在板卡终端命令行中重新执行该程序,此时应用程序可以成功运行。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值