You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法正确引入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:12:57