向Yocto镜像添加自定义FreeGLUT应用时编译找不到头文件求助
问题描述
我尝试向Yocto镜像中添加一个简单的OpenGL+FreeGLUT应用以在Qemu中运行,执行了以下操作:
- 克隆Yocto和OpenEmbedded仓库;
- 添加meta-oe层;
- 创建包含我的应用的自定义层,其编译脚本如下:
do_compile() { ${CXX} mydemo.cpp ${LDFLAGS} -lGL -lGLU -lglut -o mydemo }
- 在
build/conf/local.conf中添加行:IMAGE_INSTALL:append = " freeglut mydemo"
但运行bitbake core-image-sato时,编译器提示找不到FreeGLUT头文件:fatal error: GL/freeglut.h: No such file or directory
请问我遗漏了什么?
解决方法
你的问题出在自定义配方未正确配置依赖和编译环境,具体遗漏点如下:
- 未声明FreeGLUT的开发依赖
FreeGLUT的头文件属于freeglut-dev包(Yocto中开发包以-dev为后缀),你需要在配方的DEPENDS变量中添加freeglut,Yocto会自动引入对应的开发包,让编译器找到头文件。在配方中添加:
DEPENDS = "freeglut"
- 未使用Yocto的编译环境变量
你直接用${CXX}手动编译,但没加入CXXFLAGS变量——这个变量包含了Yocto自动生成的头文件搜索路径。修改do_compile为:
do_compile() { ${CXX} ${CXXFLAGS} ${LDFLAGS} mydemo.cpp -lGL -lGLU -lglut -o mydemo }
${CXXFLAGS}会自动包含freeglut-dev提供的GL/目录路径,解决头文件找不到的问题。
- 配方缺少基础类继承
如果是简单C++应用,配方需要继承base类来初始化基础编译环境,在配方开头添加:
inherit base
内容的提问来源于stack exchange,提问作者xXx_CodeMonkey_xXx
相关产品推荐
相关产品推荐

