没有引用 glib 函数

Posted

技术标签:

【中文标题】没有引用 glib 函数【英文标题】:No reference to glib functions 【发布时间】:2022-01-08 07:25:32 【问题描述】:

每个人。 我在 ubuntu 上工作,使用 glib 资源开发这个应用程序,我写了一个这样的 makefile:

INCLUDES= -I ./headers
FLAGS= -g

PKGCONFIGCFLAGS= `pkg-config --cflags qmi-glib` `pkg-config --cflags gio-2.0` `pkg-config --cflags gobject-2.0` `pkg-config --cflags glib-2.0` `pkg-config --cflags gmodule-no-export-2.0` `pkg-config --cflags gmodule-2.0`

PKGCONFIGLIBS= `pkg-config --libs qmi-glib` `pkg-config --libs gio-2.0` `pkg-config --libs glib-2.0` `pkg-config --libs gobject-2.0` `pkg-config --libs gmodule-no-export-2.0` `pkg-config --libs gmodule-2.0`

CC=gcc

OBJECTS=./build/qmi_test.o

all: $OBJECTS
  $(CC) $FLAGS $INCLUDES ./sources/main.c $OBJECTS -o ./bin/main
./build/qmi_test.o:./sources/qmi_test.c
  $(CC) $FLAGS $INCLUDES  $PKGCONFIGCFLAGS ./sources/qmi_test.c $PKGCONFIGLIBS -lm -o ./build/qmi_test.o

您可能会注意到,我插入了我找到的所有与 glib 相关的资源,因为我不断收到这个作为回报:

/usr/bin/ld: ./build/qmi_test.o: in function `g_autoptr_cleanup_generic_gfree':
/usr/include/glib-2.0/glib/glib-autocleanups.h:28: undefined reference to `g_free'
/usr/bin/ld: ./build/qmi_test.o: in function `qmi_test1':
/home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:24: undefined reference to `g_file_new_for_path'
/usr/bin/ld: /home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:25: undefined reference to `g_main_loop_new'
/usr/bin/ld: /home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:26: undefined reference to `g_cancellable_new'
/usr/bin/ld: /home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:29: undefined reference to `g_main_loop_run'
/usr/bin/ld: /home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:31: undefined reference to `g_object_unref'
/usr/bin/ld: /home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:32: undefined reference to `g_main_loop_unref'
/usr/bin/ld: /home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:33: undefined reference to `g_object_unref'
/usr/bin/ld: ./build/qmi_test.o: in function `Device_Create_Start':
/home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:42: undefined reference to `g_file_get_path'
/usr/bin/ld: /home/myUser/Documents/quectel_eg25-g/./sources/qmi_test.c:45: undefined reference to `qmi_device_new'
collect2: error: ld returned 1 exit status
make: *** [Makefile:13: all] Error 1

我读到调用 gcc 时元素的顺序确实很重要。但我试图遵循元素的顺序,如下所示: glib compiling

欢迎任何帮助或建议。

【问题讨论】:

【参考方案1】:

您需要将库标志 (PKGCONFIGLIBS) 添加到链接步骤而不是编译步骤:

all: $OBJECTS
  $(CC) $FLAGS $INCLUDES -lm ./sources/main.c $OBJECTS $PKGCONFIGLIBS -lm -o ./bin/main
./build/qmi_test.o:./sources/qmi_test.c
  $(CC) $FLAGS $INCLUDES  $PKGCONFIGCFLAGS ./sources/qmi_test.c  -o ./build/qmi_test.o

【讨论】:

完全正确,成功了,谢谢 @ad_valle 不过要小心,因为订单很重要!链接时,库需要目标文件之后。

以上是关于没有引用 glib 函数的主要内容,如果未能解决你的问题,请参考以下文章

dbus-glib.h里面没有DBusConnection,只有DBusGConnection。

GLib 中的 GRefString 实现是啥?

致命错误:glib.h:使用 vscode 和 mingw 时没有这样的文件或目录

我需要对 glib 信号参数执行 g_object_unref() 吗?

在没有 GNOME 的情况下使用 glib gio GVolumeMonitor

DBus Glib 发送信号 - 没有发出信号