g++编译Wayland窗口程序时无法链接相关方法出现未定义引用错误
问题根因
- 第一类报错
No package 'wayland-client-protocol' found:不存在名为wayland-client-protocol的pkg-config包,该部分协议相关头文件已包含在wayland-client的引用体系中,无需单独指定。 - 第二类链接报错
undefined reference to xxx:你的编译命令仅通过pkg-config --cflags获取了头文件搜索路径参数,缺失了--libs参数获取链接阶段所需的库依赖信息,导致链接器无法找到wayland相关函数的实现。 - 头文件中找不到函数实现属于正常情况:C/C++头文件仅存放函数声明,函数实现存放在对应的动态/静态库文件中,不属于头文件的职责范围。
解决步骤
- 先安装完整依赖,Pop!_OS基于Debian/Ubuntu软件源,执行以下命令即可:
sudo apt update && sudo apt install libwayland-dev wayland-protocols pkg-config
- 修正编译命令,同时传入编译和链接参数:
g++ program.cxx $(pkg-config --cflags --libs wayland-client) -o program
上述命令会自动加入链接libwayland-client.so的参数,无需手动指定库名,执行后即可正常编译生成可执行文件。
内容的提问来源于stack exchange,提问作者del
相关产品推荐
相关产品推荐

