2014-08-28 62 views
0

当我链接.o文件,有些问题发生的象征:“未定义的引用”连LIB具有的功能

gcc -L/usr/local/apr/lib -lapr-1 -pthread -laprutil-1 devpkg.o bstrlib.o db.o shell.o commands.o -o devpkg 
devpkg.o: In function `main': 
/root/workspace/devpkg/devpkg.c:21: undefined reference to `apr_pool_initialize' 
/root/workspace/devpkg/devpkg.c:22: undefined reference to `apr_pool_create_ex' 
/root/workspace/devpkg/devpkg.c:36: undefined reference to `apr_getopt_init' 
/root/workspace/devpkg/devpkg.c:38: undefined reference to `apr_getopt' 

我用“objdump的-T”来检查的lib,它返回:

objdump -T libapr-1.so|grep apr_pool_initialize 
000000000001db00 g DF .text 00000000000000fb Base  apr_pool_initialize 

为什么会发生这种情况?

+0

如果将'-l'规则放在命令的末尾,会怎样? – 2014-08-28 07:33:33

+0

'undefined reference'指示编译错误,而不是连接错误。你应该''包含'lib的头文件(位于文件devpkg.c的顶部)。 – 2014-08-28 07:34:23

+0

@barakmanos:不,除非我非常困惑,“未定义的参考”绝对是一个链接器错误。 (但对我来说,最好是在第一杯咖啡之前明确地表示倾向性) – 2014-08-28 07:46:29

回答

1

这很可能只是一个简单的依赖性问题。您可能想尝试列出.o文件之后链接到的所有库,并根据它们之间的依赖关系以正确的顺序列出。