linux下调用链接库问题
目录结构如下:
ctest
|-- hello.c
|-- hello.h
`-- lib
|-- head.h
|-- libtest.so
|-- package1.c
`-- package2.c
//******package1.c*********
#include "head.h "
void fun1()
{
printf( "in fun1, package1......\n ");
}
void fun2()
{
printf( "in fun2, package1......\n ");
}
//*******package2.c**********************
#include "head.h "
void fun3()
{
printf( "in fun3, package2......\n ");
}
void fun4()
{
printf( "in fun4, package2......\n ");
}
//********head.h********
#include <stdio.h>
void fun1();
void fun2();
void fun3();
void fun4();
//***********hello.c*************
#include "hello.h "
#include "head.h "
int main(int argv, char ** argc)
{
printf( "begin......\n ");
func1();
printf( "end......\n ");
return 1;
}
//***************hello.h***************
#include <stdio.h>
[root@localhost lib]$ gcc package1.c package2.c -fPIC -shared -o libtest.so
[root@localhost lib]$ cd ..
[root@localhost ctest]$ gcc hello.c -I ./lib -L ./lib -ltest -o hello
/tmp/ccuTyqmn.o: In function `main ':
hello.c:(.text+0x1e): undefined reference to `func1 '
collect2: ld 返回 1
报错说找不到func1的定义,但是我已经将func1,func2,func3,func4打到了libtest.so包中,并且将那个包加进来了,为什么还找不到阿?
------解决方案--------------------原因1. gcc hello.c -I ./lib -L ./lib -ltest -o hello 不对。-L ./lib中间没有空格,
像这样:gcc hello.c -I./lib -L./lib -ltest -o hello,不然找不到libtest.so
原因2. main里的函数调用func1();名字不对,在包里的函数明明是fun1,fun2,fun3,fun4
------解决方案--------------------有没空格无关.
主要是main()内函数名不对.