读书人

linux下调用链接库有关问题

发布时间: 2012-04-02 19:58:59 作者: rapoo

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()内函数名不对.

读书人网 >UNIXLINUX

热点推荐