编译工程“undefined reference to `pthread_create'”

头文件包括#include <pthread.h>,但编译时出现
riscv32-unknown-elf-ld: ohos/libs/libtcp_server.a(tcp_server_demo.o): in function `.L0 ':
tcp_server_demo.c:(.text.TCPServerTask+0xd8): undefined reference to `pthread_create'

请问怎么解决?

求助
2021-12-09 16:50:14
浏览
收藏 0
回答 2
已解决
回答 2
按赞同
/
按时间
liangkz_梁开祝
2

轻量系统的KAL支持cmsis和posix接口,需要在调用模块的BUILD.gn的include_dirs字段添加:

//device/hisilicon/hispark_pegasus/hi3861_adapter/kal/cmsis

//device/hisilicon/hispark_pegasus/hi3861_adapter/kal/posix/include

或者

//kernel/liteos_m/kal/cmsis

//kernel/liteos_m/kal/posix/include

注意路径,在调用模块的源代码文件

#include “cmsis_os.h”

#include “pthread.h”

再调用相关接口即可。

 

怀疑你是BUILD.gn文件的include路径没写正确。

已于2021-12-10 12:20:24修改
分享
微博
QQ
微信
回复1
2021-12-10 12:06:21
liangkz_梁开祝
2

~.~!!

搞了半天,原来你是用hpm下载安装的 @ohos/wifiiot 这个工程~~ 这个工程代码太旧了,它都还没支持KAL/posix标准实现的接口pthread_create,你只能用cmsis的KAL接口,也就是 //kernel/liteos_m/components/cmsis/ 这里定义的接口。

 

想要尝试posix接口,你要用LTS1.0之后的代码,确保我上面提到的路径存在 kal/posix/include 目录和头文件,才可以使用。

 

//foundation/distributedschedule/services/samgr_lite/samgr/adapter/posix" 这里虽然有代码,但是你看一下...samgr/adapter/BUILD.gn 文件,ohos_kernel_type == "liteos_riscv"的轻量系统,只编译cmsis部分代码,并且这里的adapter是为samgr组件使用的,你自己的应用不要用这里的接口,否则代码耦合会导致可维护性很差。

 

其它目录下的posix相路径,你也可以看一下BUILD.gn,是不是有编译限制。

 

另外,//ohos_bundles/目录下的内容,可以删掉,这是hpm安装项目代码时的临时文件,后面没什么用的。@ohos/wifiiot 代码太旧了,建议新手先在LTS1.0上练练,再切入LTS3.0.

分享
微博
QQ
微信
回复
2021-12-11 08:38:25
相关问题
undefined symbol napi_create_threadsafe_function
4343浏览 • 1回复 待解决
openssl库编译会报undefined symbol: __errno
993浏览 • 1回复 待解决
如何引用其他工程编译的so
263浏览 • 0回复 待解决
HarmonyOS是否支持pthread.h
227浏览 • 1回复 待解决
DevEco Studio新建工程编译报错
4138浏览 • 0回复 待解决
导入HI3861工程之后编译出错
6040浏览 • 2回复 待解决
使用fetch报错,fetch undefined
7039浏览 • 2回复 待解决
pthread创建的线程中如何读取rawfile
1878浏览 • 1回复 待解决
如何在C++项目中使用pthread
1887浏览 • 1回复 待解决
如何获取单例为undefined
336浏览 • 1回复 待解决