[问题]
近日,在用gcc编译程序的时候,出现如下错误:
crifan@ubuntu904:dynamicLink$ gcc -o Program2 Program2.c -L./Lib.so
/tmp/ccILCbZR.o: In function `main’:
Program2.c:(.text+0x19): undefined reference to `foobar’
collect2: ld 返回 1
很是诧异,因为记得,如果程序要用到别的库的时候,应该是用-L 或者-l的,去包含对应的库的,但是却一直出错。
以为是库类型不支持所导致的,所以又去换了库名,也不行:
crifan@ubuntu904:dynamicLink$ mv Lib.so Lib.a
crifan@ubuntu904:dynamicLink$ gcc -o Program2 Program2.c -LLib.a
/tmp/ccYbP4uM.o: In function `main’:
Program2.c:(.text+0x19): undefined reference to `foobar’
collect2: ld 返回 1
crifan@ubuntu904:dynamicLink$ gcc -o Program2 Program2.c -L./Lib.a
/tmp/ccO3ZAGc.o: In function `main’:
Program2.c:(.text+0x19): undefined reference to `foobar’
collect2: ld 返回 1
[解决]
后来,得知,这样不加-L或-l,直接后面加上库名,就可以编译通过了:
crifan@ubuntu904:dynamicLink$ ls
Lib.c Lib.c~ Lib.h Lib.so Program1 Program1.c Program2.c
crifan@ubuntu904:dynamicLink$ mv Lib.so Lib.a
crifan@ubuntu904:dynamicLink$ gcc -o Program2 Program2.c Lib.a
crifan@ubuntu904:dynamicLink$ gcc -o Program2 Program2.c Lib.so
gcc: Lib.so:没有该文件或目录
crifan@ubuntu904:dynamicLink$ mv Lib.a Lib.so
crifan@ubuntu904:dynamicLink$ gcc -o Program2 Program2.c Lib.so
[疑问]
看来是自己记错了,但是gcc编译的时候,何时要加-L或-l去包含所需要的库,有待详细研究。。。
转载请注明:在路上 » [已解决]Program2.c:(.text+0x19): undefined reference to `foobar’