Linux下GCC11.2编译ImGui+GLFW+OpenGL报错找不到-limgui如何解决
报错原因
-limgui是告诉链接器查找预编译的libimgui.so(动态库)或libimgui.a(静态库)文件,你目前仅将ImGui的源码存放在项目目录下,没有生成对应的预编译库,也没有把ImGui源码加入编译列表,因此链接器找不到对应依赖,抛出该错误。
解决方案
方案1:直接编译ImGui源码到项目(新手推荐,无需单独编译库)
直接把所有用到的ImGui源码加入编译命令即可,无需额外生成库文件:
- 先确认
include文件夹下的文件齐全:除了核心的imgui.h/imgui.cpp外,glfw+opengl3的示例还需要imgui_impl_glfw.h/imgui_impl_glfw.cpp、imgui_impl_opengl3.h/imgui_impl_opengl3.cpp,以及imgui_draw.cpp、imgui_widgets.cpp、imgui_tables.cpp这几个核心实现文件。 - 假设你的项目主文件为
main.cpp,调整编译命令如下:
gcc main.cpp include/imgui.cpp include/imgui_draw.cpp include/imgui_widgets.cpp include/imgui_tables.cpp include/imgui_impl_glfw.cpp include/imgui_impl_opengl3.cpp -I./include -lstdc++ -lglfw -lGL -o imgui_demo
参数说明:
- 所有ImGui的cpp文件直接加入编译列表,和项目代码一起编译链接
-I./include指定头文件搜索路径为当前目录下的include文件夹- 移除原命令中的
-limgui参数,不需要再链接预编译的ImGui库
方案2:预编译ImGui为静态库(适合多项目复用场景)
如果你需要在多个项目中使用ImGui,可以先把它编译为静态库,再链接到项目中:
- 编译生成静态库:
# 进入存放ImGui源码的include目录 cd include # 编译生成所有目标文件 g++ -c imgui.cpp imgui_draw.cpp imgui_widgets.cpp imgui_tables.cpp imgui_impl_glfw.cpp imgui_impl_opengl3.cpp -I. # 打包为静态库libimgui.a ar rcs libimgui.a *.o
- 编译你的项目代码,指定库搜索路径:
gcc main.cpp -I./include -L./include -lstdc++ -lglfw -lGL -limgui -o imgui_demo
参数说明:
-L./include告诉链接器到include目录下查找你编译好的静态库
注意事项
- 如果你使用glad加载OpenGL函数,编译时需要额外添加参数
-DIMGUI_IMPL_OPENGL_LOADER_GLAD - 不需要全量功能的话,可以按需删减参与编译的ImGui源码文件,核心功能仅保留
imgui.cpp和imgui_draw.cpp即可
内容的提问来源于stack exchange,提问作者Theo Dale
相关产品推荐
相关产品推荐

