在QEMU上使用VxWorks SDK:无法引用kernelLib.h问题求助
解决VxWorks SDK中kernelLib.h找不到及链接错误问题
1. 头文件找不到的解决方法
kernelLib.h仅存在于vxsdk/sysroot/krnl/h/public目录,默认编译路径未包含该目录,需手动添加头文件搜索路径:
- 在编译命令中使用
-I参数指定目录,示例:wr-c++ -I vxsdk/sysroot/krnl/h/public hello_vxworks.cpp -static -o hello_vxworks - 不推荐直接在代码中写绝对路径包含(可移植性差),但若临时测试,可写:
#include "vxsdk/sysroot/krnl/h/public/kernelLib.h"
2. 链接错误(undefined reference to kernelTimeSlice)的解决方法
链接错误说明编译器已找到头文件,但缺少对应内核库的链接。kernelTimeSlice是VxWorks内核API,需显式链接kernel库:
- 在编译命令中添加
-lkernel参数,完整命令示例:wr-c++ -I vxsdk/sysroot/krnl/h/public hello_vxworks.cpp -static -lkernel -o hello_vxworks - 若SDK的内核库不在默认搜索路径,需用
-L参数指定库目录(通常为vxsdk/sysroot/krnl/lib):wr-c++ -I vxsdk/sysroot/krnl/h/public -L vxsdk/sysroot/krnl/lib hello_vxworks.cpp -static -lkernel -o hello_vxworks
补充说明
VxWorks 7的SDK将内核态头文件、库与用户态资源分离存放,krnl目录对应内核态组件,因此必须显式指定路径和链接库。同时要确保你的程序是内核态程序,kernelTimeSlice无法在用户态程序中直接调用。
内容的提问来源于stack exchange,提问作者Andrea Zanni
相关产品推荐
相关产品推荐

