链接器错误时编译针对glib …?

我在编译一个简单的示例程序时遇到了麻烦, 我得到以下错误。 我可以得到它编译,但不与-c标志链接,我相信这意味着我已经安装了glib头,但它没有find共享目标代码。 请参阅下面的Make文件。

 $> make re gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lglib-2.0 re.c -o re /tmp/ccxas1nI.o: In function `print_uppercase_words': re.c:(.text+0x21): undefined reference to `g_regex_new' re.c:(.text+0x41): undefined reference to `g_regex_match' re.c:(.text+0x54): undefined reference to `g_match_info_fetch' re.c:(.text+0x6e): undefined reference to `g_print' re.c:(.text+0x7a): undefined reference to `g_free' re.c:(.text+0x8b): undefined reference to `g_match_info_next' re.c:(.text+0x97): undefined reference to `g_match_info_matches' re.c:(.text+0xa7): undefined reference to `g_match_info_free' re.c:(.text+0xb3): undefined reference to `g_regex_unref' collect2: ld returned 1 exit status make: *** [re] Error 1 

使用的Makefile

 # Need to installed libglib2.0-dev some system specific install that will # provide a value for pkg-config INCLUDES=$(shell pkg-config --libs --cflags glib-2.0) CC=gcc $(INCLUDES) PROJECT=re # Targets full: clean compile clean: rm $(PROJECT) compile: $(CC) $(PROJECT).c -o $(PROJECT) 

正在编译的.c代码:

 #include <glib.h> void print_upppercase_words(const gchar *string) { /* Print all uppercase-only words. */ GRegex *regex; GMatchInfo *match_info; regex = g_regex_new("[AZ]+", 0, 0, NULL); g_regex_match(regex, string, 0, &match_info); while (g_match_info_matches(match_info)) { gchar *word = g_match_info_fetch(match_info, 0); g_print("Found %s\n", word); g_free(word); g_match_info_next(match_info, NULL); } g_match_info_free(match_info); g_regex_unref(regex); } int main() { gchar *string = "My body is a cage. My mind is THE key."; print_uppercase_words(string); } 

奇怪的是,当我运行glib-config ,它不喜欢那个命令,虽然我不知道如何告诉Bash,或者当它抱怨说gdlib-config在这两个包中时,如何才能使用这个gdlib-config

 $> glib-config No command 'glib-config' found, did you mean: Command 'gdlib-config' from package 'libgd2-xpm-dev' (main) Command 'gdlib-config' from package 'libgd2-noxpm-dev' (main) glib-config: command not found 

编译器命令末尾的库:

gcc -I / usr / include / glib-2.0 -I / usr / lib / x86_64-linux-gnu / glib-2.0 / include re.c -o re -lglib-2.0

从GCC链接选项 :

 -llibrary
 -l图书馆
    链接时search名为library的库。 
     (与图书馆的第二种select作为一个单独的论点
    仅适用于POSIX,不build议使用。)

    它在你写这个选项的命令中有所不同,
    链接器search并处理库中的对象和文件
    命令他们被指定。
    因此,`foo.o -lz bar.o'在文件foo.o之后search库“z”
    在bar.o之前。 如果bar.o引用`z'中的函数,那么这些函数
    可能不会被加载。
 gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include re.c -o re -lglib-2.0 

呃 – 地狱 – 我已经尝试过这么多的东西,可能让他们都有点不对劲,但是我刚刚尝试了上面的,并且它的工作…. soooo解决了。