1

我一直在尝试在项目中使用 GLib。我使用 XCode。我通过 Homebrew 下载了 Glib:

brew install glib

然后我跑

brew test glib

哪个输出

/usr/bin/clang -o test test.c -I/usr/local/Cellar/glib/2.36.3/include/glib-2.0 -I/usr/local/Cellar/glib/2.36.3/lib/glib-2.0/include -I/usr/local/opt/gettext/include -L/usr/local/Cellar/glib/2.36.3/lib -L/usr/local/opt/gettext/lib -lglib-2.0 -lintl -Os -w -pipe -march=native -Qunused-arguments -mmacosx-version-min=10.9 -isysroot /Applications/Xcode5-DP6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk

因此,我复制了所有 -I 参数,并将它们粘贴到 XCode -> 项目设置 -> 构建设置 -> 其他 C 标志中。

在我的 XCode 项目中的 .c 文件中,我有

    GList  *processList_p = NULL;      /* Pointer to the process list */

如果我编译一切正常,但是如果我从 GLib 调用一个函数,例如

//Create the new list element, append it to the list and return the pointer.
return g_list_append(processList, newProcess);

我得到错误

架构 x86_64 的未定义符号:“_g_list_append”,引用自:Scheduler.o 中的 _CreateProcess ld:未找到架构 x86_64 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我真的不知道发生了什么,任何帮助将不胜感激。

4

4 回答 4

3

请参阅在 xcode 中设置 C++ 编译标志

简而言之:
将结果添加
pkg-config --cflags --libs glib-2.0
到 Build Settings -> Linking -> Other Linker Flags NOT Build Settings -> Custom Compiler Flags -> Other C Flags

由于某种原因,直接使用'pkg-config --cflags --libs glib-2.0'不起作用产生:

clang: error: no such file or directory: 'pkg-config --cflags --libs glib-2.0'
于 2016-01-04T01:09:19.017 回答
2

正如@Dash83 所说,这是一个链接器问题。您需要让编译器知道位置。

我机器上的输出:

$ pkg-config --cflags glib-2.0

-I/usr/local/Cellar/glib/2.46.2/include/glib-2.0 -I/usr/local/Cellar/glib/2.46.2/lib/glib-2.0/include -I/usr/local/opt/gettext/include

$ pkg-config --libs glib-2.0

-L/usr/local/Cellar/glib/2.46.2/lib -L/usr/local/opt/gettext/lib -lglib-2.0 -lintl

将它们传递给clang

$ clang your_program.c -o your_program `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0`

它在我这边编译。

于 2015-11-21T11:51:13.977 回答
0

这是我的朋友的链接器问题。我在控制台上的 vim 上使用 glib 并遇到你的问题,寻找在 xcode 中使用 glib 的快速入门指南,所以我不能真正告诉你如何在 xcode 上修复它,但我可以向你保证这是一个问题链接器选项/标志。

于 2013-11-22T01:03:01.260 回答
0
  1. 如果不存在,请安装 pkg-config

    brew install pkg-config

  2. 列出 cflags

    pkg-config --cflags --libs glib-2.0

  3. 如果不存在,手动选择 pkg

    PKG_CONFIG_PATH=/path/to/pkgconfig/ pkg-config --cflags --libs glib-2.0

于 2017-03-06T07:45:29.627 回答