使用GLib编译时出错

时间:2015-03-20 18:20:24

标签: c compilation libraries glib

我对C编程很陌生,我正在努力完成21世纪C'第二版。我坚持第202页,例9-7,unicode.c。此示例以:

开头
#include <glib.h>
#include <locale.h> //setlocale
#include "string_utilities.h"
#include "stopif.h"

//Frees instring for you--we can't use it for anything else.
char *localstring_to_utf8(char *instring){
    GError *e=NULL;
    setlocale(LC_ALL, ""); //get the OS's locale.
    char *out = g_locale_to_utf8(instring, -1, NULL, NULL, &e);
    free(instring); //done with the original
    Stopif(!out, return NULL, "Trouble converting from your locale to UTF-8.");
    Stopif(!g_utf8_validate(out, -1, NULL), free(out); return NULL,
            "Trouble: I couldn't convert your file to a valid UTF-8 string.");
    return out;
}

当我尝试用以下代码编译它时:

c99 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -Wall -O3 -lglib-2.0 unicode.c string_utilities.o   -o unicode

我收到错误,例如:

$ c99 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -Wall -O3 -lglib-2.0 unicode.c string_utilities.o   -o unicode
/tmp/ccBDQFiH.o: In function `localstring_to_utf8':
/home/kevin/21st_Century_C/ch09/unicode.c:29: undefined reference to `g_locale_to_utf8'
/home/kevin/21st_Century_C/ch09/unicode.c:32: undefined reference to `g_utf8_validate'
/tmp/ccBDQFiH.o: In function `main':
/home/kevin/21st_Century_C/ch09/unicode.c:48: undefined reference to `g_utf8_strlen'

这似乎表明找不到Glib库,但编译器没有抱怨这一点,并且Glib库和包含文件正好在我在命令行中指定的位置。除了libglib2.0软件包之外,我还安装了libglib2.0-dev软件包(所有软件包都安装了&#39; sudo apt-get ..&#39;)。 &#39; pkg配置&#39;似乎找到glib-2.0就好了。

这一切都在Ubuntu 14.04.2系统上。

我无法弄清楚如何更正此错误,并且无法理解为什么它找不到特定的Glib函数,如果它找到了glib include和lib文件。

1 个答案:

答案 0 :(得分:2)

命令行中的事物顺序很重要。一般来说,它应该是这样的:

gcc [options] [source files] [object files] [-L stuff] [-lstuff] [-o outputfile]

所以请给它一个旋转:

gcc -g -Wall -O3 -std=gnu11 `pkg-config --cflags glib-2.0` \
    unicode.c string_utilities.o `pkg-config --libs glib-2.0` \
    -o unicode

Compiling GLib ApplicationsGLib Reference Manual部分也介绍了这一点:

$ cc hello.c `pkg-config --cflags --libs glib-2.0` -o hello