首页 文章

Glib链接错误:未定义引用

提问于
浏览
0

我不确定这是否是提出问题的正确方法..我只是试着解决了4天的问题,而且我现在非常沮丧...我有以下问题:

之后我安装了Ubuntu 13.以及一些库和包 . 然后我安装了glib2一切都很顺利,我在做./configure,make或make install时没有出错 . 但是,当我尝试在C中编译测试文件时,我可以编译没有错误,但是我得到以下错误:

main.c:116:référenceindéfinievers«g_hash_table_new_full»main.c:139:référenceindéfinievers«g_hash_table_lookup»main.c:168:référenceindéfinievers«g_hash_table_insert»main.c:181:référenceindéfinievers«g_hash_table_lookup»main .c:211:référenceindéfinievers«g_hash_table_insert»main.c:250:référenceindéfinievers«g_hash_table_lookup»

我编译:

gcc -D_GNU_SOURCE -I / usr / include / glib-2.0 -I / usr / include / glib-2.0 / glib.h -I / usr / lib / x86_64-linux-gnu / glib-2.0 / include / -lglib- 2.0 -D_FILE_OFFSET_BITS = 64 -D_LARGEFILE_SOURCE -g -Wall -Wextra -std = c99 -lm * .c -o formattage

pkg-config --cflags --libs glib-2.0给了我:

-I / usr / include / glib-2.0 -I / usr / lib / x86_64-linux-gnu / glib-2.0 / include -lglib-2.0

我尝试使用这个命令:

gcc -v -H -std = c99 -g -Wall -D_GNU_SOURCE $(pkg-config --cflags glib-2.0)* .c $(pkg-config --libs glib-2.0)-o formattage

但是我得到了这样的信息:

gcc -v -H -std = c99 -g -Wall -D_GNU_SOURCE * .c -o formattage使用内置规范 . COLLECT_GCC = gcc COLLECT_LTO_WRAPPER = / usr / lib / gcc / x86_64-linux-gnu / 4.8 / lto-wrapper目标:x86_64-linux-gnu配置为:../ src / configure -v --with-pkgversion ='Ubuntu / Linaro 4.8.1-10ubuntu9' - with-bugurl = file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages = c,c,java,go,d,fortran,objc ,obj-c --prefix = / usr --program-suffix = -4.8 --enable-shared --enable-linker-build-id --libexecdir = / usr / lib --without-included-gettext --enable -threads = posix --with-gxx-include-dir = / usr / include / c /4.8 --libdir = / usr / lib --enable-nls --with-sysroot = / --enable-clocale = gnu - -enable-libstdcxx-debug --enable-libstdcxx-time = yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt = gtk --enable-gtk-cairo --with-java-home = / usr / lib / jvm / java-1.5.0-gcj-4.8-amd64 / jre --enable-java-home --with-jvm- root-dir = / usr / lib / jvm / java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir = / usr / lib / jvm-exports / java-1.5.0-gcj-4.8 -amd64 --with-arch-directory = amd64 --with-ecj-jar = / usr / sh是/ java / eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32 = i686 --with-abi = m64 --with-multilib-list = m32,m64,mx32 --with-tune = generic --enable-checking = release --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu线程模型:posix gcc版本4.8.1(Ubuntu / Linaro 4.8.1-10ubuntu9)COLLECT_GCC_OPTIONS =' - v'' - H'' - std = c99'' - g'' - 墙''-D''_GNU_SOURCE'' - o' 'formattage''-minune = generic''-march = x86-64'/usr/lib/gcc/x86_64-linux-gnu/4.8/cc1 -quiet -v -imultiarch x86_64-linux-gnu -H -D _GNU_SOURCE main .c -quiet -dumpbase main.c -mtune = generic -march = x86-64 -auxbase main -g -Wall -std = c99 -version -fstack-protector -Wformat -Wformat-security -o /tmp/ccuxfazT.s GNU C(Ubuntu / Linaro 4.8.1-10ubuntu9)版本4.8.1(x86_64-linux-gnu)由GNU C版本4.8.1,GMP版本5.1.2,MPFR版本3.1.1-p2,MPC版本1.0编译 . 1 GGC启发式: - param ggc-min-expand = 100 --param ggc-min-heapsize = 131072忽略不存在的目录“/ usr / lo cal / include / x86_64-linux-gnu“忽略不存在的目录”/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include“

#include "..." search starts here:
 #include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
GNU C (Ubuntu/Linaro 4.8.1-10ubuntu9) version 4.8.1 (x86_64-linux-gnu)
    compiled by GNU C version 4.8.1, GMP version 5.1.2, MPFR version 3.1.1-p2, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: b946adc090b5605f865521be8b22959c
. /usr/include/stdlib.h
.. /usr/include/features.h
... /usr/include/x86_64-linux-gnu/sys/cdefs.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
... /usr/include/x86_64-linux-gnu/gnu/stubs.h
.... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h
.. /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/waitflags.h
.. /usr/include/x86_64-linux-gnu/bits/waitstatus.h
... /usr/include/endian.h
.... /usr/include/x86_64-linux-gnu/bits/endian.h
.... /usr/include/x86_64-linux-gnu/bits/byteswap.h
..... /usr/include/x86_64-linux-gnu/bits/types.h
...... /usr/include/x86_64-linux-gnu/bits/wordsize.h
...... /usr/include/x86_64-linux-gnu/bits/typesizes.h
..... /usr/include/x86_64-linux-gnu/bits/wordsize.h
..... /usr/include/x86_64-linux-gnu/bits/byteswap-16.h
.. /usr/include/xlocale.h
.. /usr/include/x86_64-linux-gnu/sys/types.h
... /usr/include/time.h
... /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h
... /usr/include/x86_64-linux-gnu/sys/select.h
.... /usr/include/x86_64-linux-gnu/bits/select.h
..... /usr/include/x86_64-linux-gnu/bits/wordsize.h
.... /usr/include/x86_64-linux-gnu/bits/sigset.h
.... /usr/include/time.h
.... /usr/include/x86_64-linux-gnu/bits/time.h
... /usr/include/x86_64-linux-gnu/sys/sysmacros.h
... /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
.... /usr/include/x86_64-linux-gnu/bits/wordsize.h
.. /usr/include/alloca.h
... /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h
.. /usr/include/x86_64-linux-gnu/bits/stdlib-float.h
. /usr/include/stdio.h
.. /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h
.. /usr/include/libio.h
... /usr/include/_G_config.h
.... /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h
.... /usr/include/wchar.h
... /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stdarg.h
.. /usr/include/x86_64-linux-gnu/bits/stdio_lim.h
.. /usr/include/x86_64-linux-gnu/bits/sys_errlist.h
. /usr/include/string.h
.. /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h
main.c:5:18: fatal error: glib.h: No such file or directory
 #include <glib.h>
                  ^
compilation terminated.
make: *** [all] Error 1

我认为它变得更加复杂

谢谢,

3 回答

  • 1

    gcc 的程序参数顺序很重要(源文件应始终在链接库之前) .

    编译

    gcc -std=c99 -g -Wall -D_GNU_SOURCE $(pkg-config --cflags glib-2.0) \
           *.c  \
           $(pkg-config --libs glib-2.0)  -o formattage
    

    但是你真的想用 Makefile 类似于this one

    当然,您还需要安装 libglib2.0-dev 包,由this answer提醒 .

    顺便说一句:我(就像你可能是)一个法语母语人士,但在S.O.你应该用英语提问,并收到英文错误信息 . 在编译Stack Overflow之前,使用export LANG = C将LANG环境变量设置为C.

  • 0

    您需要"link"对库实现您在 -I 选项中包含的接口 . 这意味着在构建命令中添加 -lglib2.0 等内容 . 如果由于位于非标准位置而未找到库,则首先需要说 -L/some/path/to/glib ,其位置为 libglib2.0 .

  • 0

    由于没有找不到 -lglib-2.0 的错误,我们可以假设已找到并传递给链接器 . 但是符号仍然缺失 .

    我不知道这会怎么样 . 您可以检查文件是否包含符号

    readelf -Ws /usr/lib/x86_64-linux-gnu/libglib-2.0.so | grep g_hash_table
    

    否则,我是否理解您从源代码安装了glib2?有没有理由你没有使用它安装它

    sudo apt-get install libglib2.0-dev
    

相关问题