linux下静态库的问题!!!!!急!!!

hyf140 2008-07-06 04:18:32
我把libxml2-2.6.32编译成动态链接库,然后将该动态链接库拷贝到/usr/lib目录下
写了一个测试程序
用编译命令
gcc -o example1 example1.c -lzzz(zzz为动态库的名字)
报告出错
[root@localhost xml]# gcc -o example1 example1.c -lzzz
example1.c:4:23: xmlmemory.h: 没有那个文件或目录
example1.c:5:20: parser.h: 没有那个文件或目录
example1.c:6:18: tree.h: 没有那个文件或目录
example1.c:11: parse error before "cur"
example1.c: In function `travel':
example1.c:13: `xmlNodePtr' undeclared (first use in this function)
example1.c:13: (Each undeclared identifier is reported only once
example1.c:13: for each function it appears in.)
example1.c:13: parse error before "NodePtr"
example1.c:15: `NodePtr' undeclared (first use in this function)
example1.c:15: `cur' undeclared (first use in this function)
example1.c:22: `childptr' undeclared (first use in this function)
example1.c: In function `main':
example1.c:35: `xmlDocPtr' undeclared (first use in this function)
example1.c:35: parse error before "doc"
example1.c:36: `xmlNodePtr' undeclared (first use in this function)
example1.c:37: `doc' undeclared (first use in this function)
example1.c:44: `Node' undeclared (first use in this function)
这是什么原因,请大侠指点指点?
为什么我的头文件没有?
在编译成动态链接库的时候应该就有了把????
请问一下怎么解决?????
谢谢!!!!
...全文
234 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyf140 2008-07-08
  • 打赏
  • 举报
回复
楼上的兄弟,你说你裁剪过libxml能不能将你的步骤写给我看看,急啊,我是将所有的.h和.c文件(除去那些test*.c)放在同一个目录,并且将所有的.h和.c文件中的#include <libxml/*.h>改成了#include “*.h”,然后进行编译成动态链接库。我现在想试试将其编译成动态链接库放在linux中是否可行,如果可以再将其放在嵌入式linux下,然后将linux做成镜像下到板子上去。如果有时间帮我解答一下,小弟先谢了。
hyf140 2008-07-08
  • 打赏
  • 举报
回复
谢谢各位大侠,我试试看,我现在是想将libxml2进行裁剪,然后将其编译成动态链接库放到嵌入式linux下,
我想问问的是,编译成了动态库之后,那些头文件没有编译到动态链接库里面吗?
程序运行的时候include目录下还必须有这些自带的头文件???
谢谢!!
mymtom 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aSpace 的回复:]
编译只是编译成.so文件,头文件还是需要的
把头文件拷到/usr/local/include
[/Quote]
moluowangzi 2008-07-07
  • 打赏
  • 举报
回复
不要-lzzzz 试下
mymtom 2008-07-07
  • 打赏
  • 举报
回复
我把libxml2-2.6.32编译成动态链接库,然后将该动态链接库拷贝到/usr/lib目录下
========
这么安装的,正确的安装方法:
方法1:
下载源码,解压,configure, make, make install
方法2:
下载适用于自己的操作系统的二进制版本并安装
windowsxp0925 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hyf140 的回复:]
楼上的兄弟能不能说清楚一点?
但是我按照网上写了一个简单的程序,然后编译通过,再写了一个测试的程序,也可以运行啊。
It.h
Int add(int x,int y);
Void myprint(void);

It.c
#include <stdio.h>
Void myprint(void)
{
Printf(“linux library test!!!\n”);
}

Itit.c
#include <stdio.h>
Int add(int x,int y)
{
Printf(“%d”,x+y);
Return (x+y);
}

Test.c
#include “it.h”
Int main()
{…
[/Quote]


你的test.c是和It.h文件在同一个目录下吧。
你应该知道#include <>和#include ""的区别。
szkarry 2008-07-07
  • 打赏
  • 举报
回复
在你的gcc 命令中加 -I 后面加上xml头文件的路径
还有你编译好的库文件不必放到usr/lib 下
只要在编译时指定下路径就行了
你如果只是做测试的话
现在linux系统中一般都会有libxml2的头文件和库了
只是不是交叉编译的
moluowangzi 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 moluowangzi 的回复:]
不要-lzzzz 试下
[/Quote]

再加上zzzz.so

gcc -o example1 example1.c zzz.so(zzz为动态库的名字)
hyf140 2008-07-06
  • 打赏
  • 举报
回复
楼上的兄弟能不能说清楚一点?
但是我按照网上写了一个简单的程序,然后编译通过,再写了一个测试的程序,也可以运行啊。
It.h
Int add(int x,int y);
Void myprint(void);

It.c
#include <stdio.h>
Void myprint(void)
{
Printf(“linux library test!!!\n”);
}


Itit.c
#include <stdio.h>
Int add(int x,int y)
{
Printf(“%d”,x+y);
Return (x+y);
}

Test.c
#include “it.h”
Int main()
{
Myprint();
Add(2,3);
Return 0;

}


编译成动态链接库
Gcc it.c itit.c –fPIC –shared –o 动态库文件名(.so结尾)
如果多个文件按照上面的步骤即可

将动态链接库复制到usr/lib目录下
Cp xxx.so /usr/lib
编译测试文件
Gcc –o test test.c –lxxx(链接库名)
这样的话编译不会报错,而且也不用把头文件放到include下面,这是为什么?
请指教,谢谢!!!!
aSpace 2008-07-06
  • 打赏
  • 举报
回复
编译只是编译成.so文件,头文件还是需要的
把头文件拷到/usr/local/include
hyf140 2008-07-06
  • 打赏
  • 举报
回复
标题写错了,不好意思
是动态链接库!!!

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧