libcap 交叉编译

  由于使用arm-hisiv200-linux编译alljoyn需要libcap库,所以这里简单说下libcap的编译过程。

一、GCC编译

1.下载libcap,地址:,注意不是libpcap,libpcap实在libcap基础上开发的,alljoyn使用的是libcap;

2.解压后,在libcap根目录下编译,命令:make

3.生成的库文件在根目录中的libcap文件目录下,包含静态库libcap.a和动态库3个,具体名称和下载的版本有关,libcap.so,libcap.so.2,libcap.so.2.25;

4.使用的时候需要拷贝libcap文件目录下的/include头文件目录,然后-lcap连接动态库,或者指定连接libcap.a静态库;

 

二、交叉编译

注意:相比于GCC直接编译,交叉编译步骤较为复杂,且不能错一步,否则不能生成库文件。

1.下载libcap,地址:

2.使用GCC编译生成cap_names.h和cap_names.list.h,然后拷贝到windows桌面下或者linux其它一个目录中,注意不能再libcap个目录下,因为make clean会将其删除;

3.打开libcap/下面的Makefile文件,屏蔽掉下面N行:

#_makenames: _makenames.c cap_names.list.h

# $(BUILD_CC) $(BUILD_CFLAGS) $< -o $@

#cap_names.h: _makenames

# ./_makenames > cap_names.h

#$(GPERF_OUTPUT): cap_names.list.h

# perl -e 'print "struct __cap_token_s { const char *name; int index; };\n%{\nconst struct __cap_token_s *__cap_lookup_name(const char *, unsigned int);\n%}\n%%\n"; while ($$l = <>) { $$l =~ s/[\{\"]//g; $$l =~ s/\}.*// ; print $$l; }' < $< | gperf --ignore-case --language=ANSI-C --readonly --null-strings --global-table --hash-function-name=__cap_hash_name --lookup-function-name="__cap_lookup_name" -c -t -m20 $(INDENT) > $@

#cap_names.list.h: Makefile $(KERNEL_HEADERS)/linux/capability.h

# @echo "=> making $@ from $(KERNEL_HEADERS)/linux/capability.h"

# perl -e 'while ($$l=<>) { if ($$l =~ /^\#define[ \t](CAP[_A-Z]+)[ \t]+([0-9]+)\s+$$/) { $$tok=$$1; $$val=$$2; $$tok =~ tr/A-Z/a-z/; print "{\"$$tok\",$$val},\n"; } }' $(KERNEL_HEADERS)/linux/capability.h | fgrep -v 0x > $@

并且将下面一行的cap_file去掉:

  FILES=cap_alloc cap_proc cap_extint cap_flag cap_text #cap_file

4.执行make clean,此时刚才GCC编译生成的.O文件和库文件,以及cap_names.h和cap_names.list.h都会被删除;

5.修改根目录下的Makefile.Rules文件,找到CC,将默认的gcc修改为你自己的交叉编译工具链,这里以arm-hisiv00-linux为例:

  #CC := gcc

  CC := arm-hisiv200-linux-gnueabi-gcc

6.将第2步保存的两个.h文件拷贝到libcap文件目录下;

7.再次执行make,不出意外还会报错,关于/progs/getcap.c的,但库文件已经生成,所以可以无视这个错误;

8.progs/下面只是提供一些局域libcap库的工具而已,可以通过修改根目录下面的Makefile文件来跳过编译progs目录,将下面这句屏蔽即可:

  # $(MAKE) -C progs $@

以上只是本人的编译方法,如有不妥,欢迎指正并补充完善。

posted on 2016-12-14 15:30  AaronD·Chain  阅读(3404)  评论(1编辑  收藏  举报

导航