无法正确引入Libnm与Glib库的编译问题求助
解决libnm与Glib编译依赖问题
你的问题核心是直接用gcc编译时没有指定依赖库的头文件路径和链接参数,glib、libnm这类GNOME生态的库都用pkg-config管理编译配置,手动指定路径容易遗漏依赖,正确做法如下:
1. 用pkg-config获取编译参数
pkg-config会自动输出指定库所需的头文件路径(-I参数)、链接库(-l参数)等,执行以下命令查看参数:
# 查看glib-2.0的编译参数 pkg-config --cflags --libs glib-2.0 # 查看libnm的编译参数 pkg-config --cflags --libs libnm
2. 正确的编译命令
因为你的代码是C++(用到了<iostream>),必须用g++而非gcc编译,把两个库的参数合并,完整命令:
g++ main.cpp -o nm-cli-tool $(pkg-config --cflags --libs glib-2.0 libnm)
3. 代码小修正
你的代码里用了EXIT_SUCCESS,需要添加头文件<cstdlib>,否则会出现未定义标识符的警告,修正后代码:
#include <iostream> #include <cstdlib> #include <glib-2.0/glib.h> #include <libnm/NetworkManager.h> int main(const int argc, const char **argv) { std::cout << "Hello, World!" << std::endl; return EXIT_SUCCESS; }
为什么之前的编译命令失败?
- 直接
gcc main.cpp -o main.o没有添加头文件路径,比如glib的子头文件glib/galloca.h在/usr/include/glib-2.0/glib下,需要通过-I/usr/include/glib-2.0告诉编译器这个路径,pkg-config会自动处理这些细节。 - libnm依赖gio库,
pkg-config也会自动加入gio的头文件路径和链接参数,不用手动添加。
内容的提问来源于stack exchange,提问作者Mhouney
相关产品推荐
相关产品推荐

