1. 创建ubinode_demo工程目录,在该目录下创建include、src、lib、dynamiclib、output、obj子目录,将xmlrpc头文件、静态库和动态库分别拷贝到include、lib、dynamiclib目录下。

2. 编写Makefile文件

3. 在src目录下创建并编辑源代码,并在include目录下编写相应头文件。

4. 执行make

(1)采用静态库编译

出现如下错误:

linux 链接hdfs linux 链接静态库_静态库

原因如下:

Makefile在写明其链接的静态库时,要严格按照其依赖关系,越是底层的库,越往后面写。在链接静态库库时,libxmlrpc_client.a依赖其他的库。

解决方法:

链接xmlrpc静态库时将 -lxmlrpc_client \移到最前面的位置。

linux 链接hdfs linux 链接静态库_linux_02

(2)采用动态库编译

修改makefile文件中如下命令:

XMLRPCLIBS = -L$(DYNAMICLIBDIR) \

出现如下错误:

linux 链接hdfs linux 链接静态库_xml_03

解决方法:删除makefile中此库的链接。

(3)查看由动态库生成的可执行文件的大小时,发现和静态库生成的可执行程序大小一样。

原因如下:

$(DEMOBIN):

$(CC) -o $(DEMOBIN) $(C_FILES) $(INCLUDES) $(CURLLIBS) $(CJSONLIBS) $(XMLRPCLIBS) -lm -lrt -lpthread -ldl

不同目录下同名的库,只取第一个,后面的同名库被忽略。即在编译链接时使用了CURLLIBS目录下的xmlrpc静态库。

解决方法:

$(DEMOBIN):

$(CC) -o $(DEMOBIN) $(C_FILES) $(INCLUDES) $(XMLRPCLIBS $(CURLLIBS) $(CJSONLIBS) -ldl -lm -lrt -lpthread

linux 链接hdfs linux 链接静态库_linux 链接hdfs_04

 

5 . 下载到设备运行程序

(1)静态库

将生成的可执行文件下载到设备,赋予执行权限运行程序。

(2)动态库

方法1:将动态库下载到设备的/usr/lib目录,将可执行文件下载到设备,赋予执行权限运行程序。

方法2:将动态库和可执行文件打包下载到设备,解压后进入目录,赋予执行权限运行程序。

 

6、动态库(.so)和静态库(.a)的区别:

1、Makefile在写明其链接的库时,静态库要严格按照其依赖关系,动态库则不用。

2、静态库被添加为程序的一部分使用,生成的可执行文件大。动态库只是说明要用到这个库,并没有包含库的内容,生成的可执行文件较静态库小,但运行时需要将所有的动态库下载到设备。

3、如果静态库重新编译,应用程序也要重新编译,不利于维护与更新;动态库是程序运行时加载的,所以只需更新动态库即可。