当前位置: 技术问答>linux和unix
linux下调用链接库问题
来源: 互联网 发布时间:2016-01-30
本文导语: 目录结构如下: 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 fun...
目录结构如下:
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
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
[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包中,并且将那个包加进来了,为什么还找不到阿?
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
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
[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
像这样:gcc hello.c -I./lib -L./lib -ltest -o hello,不然找不到libtest.so
原因2. main里的函数调用func1();名字不对,在包里的函数明明是fun1,fun2,fun3,fun4
|
有没空格无关.
主要是main()内函数名不对.
主要是main()内函数名不对.