1. 写在前面https://www.cnblogs.com/fyluyg/p/13081879.html NDI协议是什么不在本文的研讨范围,大家有兴趣的可以到官网上或其他人的博文查看它的介绍。在这里我们只讨论怎么NDI协议移植。在写这编之前我有在网上查过资料但是基本上没找到相关资料,给官方写邮件,磕磕绊绊终于移植成功了。写下这编博文是想希望后面有相关需求的人有些借鉴资料少走弯路。闲话少叙。 2. 移植2.1) expat移植expat的移植很简单,就是configure,make,make install三部曲。configure可以参照我的配置: #!/bin/bash ./configure CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ --host=arm-hisiv300-linux --prefix=$(pwd)/_hisiv300_install ac_cv_func_setpgrp_void=yes --enable-shared=no --enable-static=yes\ 需要加上 ac_cv_func_setpgrp_void=yes不然会报错。 2.2) libdaemon移植libdaemon移植也是configure,make,make install就可以了。configure可以参照我的配置: #!/bin/bash ./configure CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ --host=arm-hisiv300-linux --prefix=$(pwd)/_hisiv300_install ac_cv_func_setpgrp_void=yes\ 2.3) libcap移植https://mirrors.edge./pub/linux/libs/security/linux-privs/libcap2/ make CROSS_COMPILE=arm-linux-gnueabihf- make DESTDIR=/home/xiaopf/tools/libcap-2.44/output-arm/ install libcap 编译简单介绍 编号9527 深圳市易思博酷客科技有限公司 高级软件工程师 由于使用arm-hisiv200-linux编译alljoyn需要libcap库,所以这里简单说下libcap的编译过程。 一、GCC编译 1.下载libcap,地址:https://www./pub/linux/libs/security/linux-privs/libcap2/,注意不是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,地址:https://www./pub/linux/libs/security/linux-privs/libcap2/; 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 $@ 以上只是本人的编译方法,如有不妥,欢迎指正并补充完善。 发布于 2016-11-28 2.4) dbus移植在libdaemon移植的时候我们可以先用--prefix=$(pwd)/_hisiv300_install选项在一个目录下面编译出libdbus-1.so以便后面我们编译 avahi的时候使用,再去掉—prefix=$(pwd)/_hisiv300_install,这样我们把 dbus-daemon放到板子上的时候就没有路径问题了。 #!/bin/bash ./configure CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ --host=arm-hisiv300-linux --enable-systemd=no --enable-selinux=no --enable-tests=no EXPAT_CFLAGS="-I/home/softwaves/expat-2.2.9/_hisiv300_install/include" EXPAT_LIBS="/home/softwaves/expat-2.2.9/_hisiv300_install/lib/libexpat.a" --with-session-socket-dir=/var/run/dbus --with-system-socket=/var/run/dbus/system_bus_socket --with-system-pid-file=/var/run/dbus/pid #--prefix=$(pwd)/_hisiv300_install\ 2.5) avahi移植avahi移植起来比较困难 (至少在我看来)。因为在我进行./configure的时候不论怎么设置都提示找不到expat,有知道的大佬可以分享一下。所以我手动改了configure之后的生成的avahi-daemon/Makefile文件。 #!/bin/bash ./configure CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ --host=arm-hisiv300-linux --disable-libevent --disable-qt3 --disable-qt4 --disable-mono --with-distro=none --disable-glib --disable-gobject --disable-gtk --disable-gtk3 LIBDAEMON_CFLAGS="-I/home/softwaves/libdaemon-0.14/_hisiv300_install/include" LIBDAEMON_LIBS="/home/softwaves/libdaemon-0.14/_hisiv300_install/lib/libdaemon.a" --with-xml=none --disable-gdbm --disable-python --disable-python-dbus ac_cv_header_sys_capability_h=yes #--prefix=$(pwd)/_hisiv300_install \ avahi-daemon/Makefile修改内容如下,请修改为自己的路径 View Code 至此已经完成所有库的移植。
|
|
来自: XeonGate > 《Ubuntu 16.04.6》