检查“与外部库链接”的示例时,结果相互矛盾

时间:2015-06-20 17:04:32

标签: c gcc

我刚开始通过阅读“An introduction to GCC

来学习gcc / g ++

在第3.1章中,作者展示了一个与外部库和头文件链接的示例。主要源代码使用'gdbm.h'头文件(安装在教科书中的/opt/gdbm-1.8.3/include/)文件和库'libgdbm.a'(安装在/opt/gdbm-1.8.3/) lib / in text book)。链接库和头文件的过程如下:

Link to example screenshot

当我试图重复这个时,我得到了一个矛盾的结果。当我使用方法1(在示例中失败)只包含头文件路径时,程序可以编译,但是,当我使用方法2(在示例中成功)时,我收到一个错误,说 “ld:1个用于体系结构x86_64的重复符号 clang:错误:链接器命令失败,退出代码为1“

(这是我的完整命令行和错误消息:)

userMacBook-Pro:03 user$gcc -Wall -I/usr/local/include dbmain.c -L/usr/local/lib dbmain.c -lgdbm
duplicate symbol _main in:
/var/folders/6_/09vfzzms7dq1d73vl4mwlxmh0000gn/T/dbmain-9d15f9.o
/var/folders/6_/09vfzzms7dq1d73vl4mwlxmh0000gn/T/dbmain-907e96.o

这是我的成功命令:

userMacBook-Pro:03 user$ gcc -Wall -I/usr/local/include dbmain.c -lgdbm
userMacBook-Pro:03 user$ ./a.out
Storing key-value pair... done.

ld:1个用于体系结构x86_64的重复符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

有人可以解释为什么会这样吗?

我不知道作者使用哪个平台,我只使用mac OS X。

1 个答案:

答案 0 :(得分:1)

  

gcc -Wall -I/usr/local/include dbmain.c -L/usr/local/lib dbmain.c -lgdbm

文件dbmain.c在命令行中出现两次。因此,main函数出现两次。