gpt4 book ai didi

c - 针对 glib 进行编译时出现链接器错误...?

转载 作者:太空狗 更新时间:2023-10-29 16:46:01 25 4
gpt4 key购买 nike

我在 Ubuntu 上针对 glib 编译一个简单的示例程序时遇到了问题。我收到以下错误。我可以让它编译但不能与 -c 标志链接,我相信这意味着我安装了 glib header ,但它没有找到共享对象代码。另见 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("[A-Z]+", 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 或 Make 在它提示时如何只使用一个而不是另一个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 Link Options :

-llibrary-l library    Search the library named library when linking.     (The second alternative with the library as a separate argument    is only for POSIX compliance and is not recommended.)    It makes a difference where in the command you write this option;    the linker searches and processes libraries and object files in the    order they are specified.    Thus, `foo.o -lz bar.o' searches library `z' after file foo.o but    before bar.o. If bar.o refers to functions in `z', those functions    may not be loaded.

关于c - 针对 glib 进行编译时出现链接器错误...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com