g_utf8_collate() 在 Ubuntu 20.04.3 (LTS) 的 GLib-2.0 中找不到

g_utf8_collate() not found in GLib-2.0 on Ubuntu 20.04.3 (LTS)

我已经安装在我的 Ubuntu:

sudo apt-get install libglib2.0-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libglib2.0-dev-bin

但是这个小测试代码无法link:

cat -n test.c
     1  #include <stdio.h>
     2  #include <glib.h>
     3  
     4  int main()
     5  {
     6      char *p1 = "foo";
     7      char *p2 = "bar";
     8      int rc = 0;
     9  
    10      rc = g_utf8_collate(p1, p2);
    11      printf("g_utf8_collate(p1, p2) = %d\n", rc);
    12  }
cc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lm -L/usr/lib/x86_64-linux-gnu -lglib-2.0 test.c
/usr/bin/ld: /tmp/cc583STn.o: in function `main':
test.c:(.text+0x38): undefined reference to `g_utf8_collate'
collect2: error: ld returned 1 exit status

在我的所有其他系统(SuSE Linux、FreeBSD)上它 links 文件,与其他 -I-L 目录一起使用。

尝试

cc $(pkg-config --cflags --libs glib-2.0) test.c

pkg-config 的存在是为了为依赖项提供正确的编译器和链接器标志,这样您就不必手动指定它们。

我了解到源文件的顺序和链接器选项很重要。它像这样工作得很好:

cc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include test.c -lm -L/usr/lib/x86_64-linux-gnu -lglib-2.0