交叉编译RF_RING

PF_RING介绍

PF_RING是Luca研究出来的基于Linux内核级的高效数据包捕获技术。简单来说PF_RING 是一个高速数据包捕获库,通过它可以实现将通用 PC 计算机变成一个有效且便宜的网络测量工具箱,进行数据包和现网流量的分析和操作。同时支持调用用户级别的API来创建更有效的应用程序。现在我们知道PF_RING是拥有一套完整开发接口的高速数据包捕捉库,与我们熟知的libpcap十分相似,但其性能要优于libpcap

PF_RING下载(2018年1月)

https://www.ntop.org/get-started/download/#PF_RING

编译

cd PF_RING

make

交叉编译:

背景:项目中需要在一个openwrt环境下植入PF_RING动态库。首先是生产此库。

平台:编译平台为ubuntu12.04, 交叉编译平台为高通ipq4019, arm7;

步骤:

1.建立package/utils/pfring,文件结构如下;

2.将网上下载RF_RING下的文件拷贝到src目录下,文件结构如下;

├── pfring
│   ├── Makefile
│   └── src
│       ├── ChangeLog
│       ├── doc
│       ├── drivers
│       ├── kernel
│       ├── LICENSE
│       ├── Makefile
│       ├── package
│       ├── README
│       ├── README.FIRST
│       ├── README.md
│       ├── tools
│       └── userland

3. pfring/Makefile如下:

include $(TOPDIR)/rules.mk

PKG_NAME:=pfring
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/pfring
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=pf_ring -- output libpfring.so
endef

define Package/pfring/description
    It's my first package demo.
endef

define Build/Prepare
        echo "Here is Package/Prepare"
        mkdir -p $(PKG_BUILD_DIR)
        $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Package/pfring/install
        echo "Here is Package/install"
#       $(INSTALL_DIR) $(1)/bin
#       $(INSTALL_BIN) $(PKG_BUILD_DIR)/pfring $(1)/bin/
        $(INSTALL_DIR) $(1)/usr/lib
        $(CP) $(PKG_BUILD_DIR)/userland/deplib/* $(1)/usr/lib
        $(CP) $(PKG_BUILD_DIR)/userland/lib/*.so $(1)/usr/lib
endef

$(eval $(call BuildPackage,pfring))
~                                                                                                                                                                                                            
~        
View Code

4. 修改src下makefile,使用交叉工具链

主Makefile如下,

all:
        cd kernel; make
        cd userland; make
        cd drivers; make

clean:
        cd kernel; make clean
        cd userland; make clean
        cd drivers; make clean
        -cd userland/snort/pfring-daq-module; make clean

snort:
        cd userland/snort/pfring-daq-module; autoreconf -ivf; ./configure; make
        cd userland/snort/pfring-daq-module-zc; autoreconf -ivf; ./configure; make

changelog:
        git log --since={`curl -s https://sourceforge.net/projects/ntop/files/PF_RING/|grep -o "<td headers=\"files_date_h\" class=\"opt\"><abbr title=\"[^\"]*\">[^<]*</abbr></td>"|head -n 3|tail -n 1|egrep -o "[0-9]+\-[0-9]+\-[0-9]+"|head -n 1`} --name-only --pretty=format:" - %s" > ./doc/Changelog.txt

documentation:
        cd doc; make
        cd doc/doxygen; doxygen Doxyfile

此处主要使用make all和make clean;使用交叉编译工具链,需要在make 后加入参数如下:

make CROSS_COMPILE=arm-openwrt-linux-uclibcgnueabi- ARCH=arm

整过过程是逢山开路,遇水搭桥,不过过程艰辛。有问题的可以私聊。主要遇到的问题归结如下

错误1

 CC [M]  /home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel/pf_ring.o

cc1: note: someone does not honour COPTS correctly, passed 0 times

In file included from include/asm-generic/int-ll64.h:10:0,

                 from ./arch/arm/include/asm/types.h:4,

                 from include/uapi/linux/types.h:4,

                 from include/linux/types.h:5,

                 from include/linux/list.h:4,

                 from include/linux/module.h:9,

                 from /home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel/pf_ring.c:78:

include/uapi/asm-generic/int-ll64.h:11:29: fatal error: asm/bitsperlong.h: No such file or directory

compilation terminated.

make[6]: *** [/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel/pf_ring.o] Error 1

make[5]: *** [_module_/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel] Error 2

make[5]: Leaving directory `/usr/src/linux-headers-4.4.0-31-generic'

make[4]: *** [all] Error 2

make[4]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel'

make[3]: *** [all] Error 2

make[3]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring'

make[2]: *** [/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/.built] Error 2

make[2]: Leaving directory `/home/box/work/xitong/qca/qca.git/qsdk/package/utils/pfring'

make[1]: *** [package/utils/pfring/compile] Error 2

make[1]: Leaving directory `/home/box/work/xitong/qca/qca.git/qsdk'

make: *** [package/utils/pfring/compile] Error 2

1) 在vi kernel/pf_ring.c下增加kernel/pf_ring.c

2)在qca/src/linux-3.14/include/ uapi/asm-generic/int-ll64.h修改

//#include <asm/bitsperlong.h>

#include <asm-generic/bitsperlong.h>

思路:此处一直认为是内核库里没有bitsperlong.h文件,随着查资料才知道是因为没有使用交叉编译工具导致。如果使用平台的编译工具,编译时用的是gcc, 如果使用交叉编译环境,编译工具为arm-openwrt-linux-uclibcgnueabi-gcc;

在PF_RING中需要修改交叉编译变量,方法如下,在make中加入参数CROSS_COMPILE=arm-openwrt-linux-uclibcgnueabi- ARCH=arm

Make à

Make CROSS_COMPILE=arm-openwrt-linux-uclibcgnueabi- ARCH=arm

 

错误2

include/uapi/linux/types.h:4:23: fatal error: asm/types.h: No such file or directory

#include <asm/types.h>

                       ^

compilation terminated.

make[6]: *** [/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel/pf_ring.o] Error 1

make[5]: *** [_module_/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel] Error 2

make[5]: Leaving directory `/usr/src/linux-headers-3.11.0-15-generic'

make[4]: *** [all] Error 2

make[4]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel'

make[3]: *** [all] Error 2

make[3]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring'

make[2]: *** [/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/.built] Error 2

make[2]: Leaving directory `/home/pon/qca/qca.git/qsdk/package/utils/pfring'

make[1]: *** [package/utils/pfring/compile] Error 2

make[1]: Leaving directory `/home/pon/qca/qca.git/qsdk'

 

有以下解释

http://blog.youkuaiyun.com/luckywang1103/article/details/38112281

在linux中包含头文件时,有不少类似如下的写法:#include<asm/types.h>,但在linux kernel的include文件夹下并没有这个文件夹,倒是有不少以asm打头的文件夹,如:asm_powerpc、asm_ppc等。

源代码中没有asm这个文件夹,asm是一个符号连接,只有在你的主makefile的ARCH 变量赋值,编译内核的时候根据ARCH 的配置,

临时的生成asm文件夹及其下的文件,然后指向对应的体系结构的文件,如/include/asm-arm/ ,/include/asm-x86/

 

这样#include <asm/types.h> ==/include/asm-x86/types.h

 

错误1,2的解决方法:

上面两个问题是编译kernel没有编译通过:

修改makefile中的make如下:

/home/pon/qca/qca.git/qsdk/package/utils/pfring/src/kernel/Makefile:

修改前:

$(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules

修改后:

make CROSS_COMPILE=arm-openwrt-linux-uclibcgnueabi- ARCH=arm -C /home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/linux-ipq806x/linux-3.14.77/ M=/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/kernel EXTRA_CFLAGS='${EXTRA_CFLAGS}' modules

注意:此处存在隐患,如果工程更改了位置,此处需要路径需要修改;

 

错误3

checking for gcc... arm-openwrt-linux-uclibcgnueabi-gcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables...

checking whether we are cross compiling... configure: error: in `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/userland':

configure: error: cannot run C compiled programs.

If you meant to cross compile, use `--host'.

See `config.log' for more details

make[4]: *** [lib/Makefile] Error 1

make[4]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/userland'

make[3]: *** [all] Error 2

make[3]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring'

make[2]: *** [/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/.built] Error 2

make[2]: Leaving directory `/home/pon/qca/qca.git/qsdk/package/utils/pfring'

make[1]: *** [package/utils/pfring/compile] Error 2

make[1]: Leaving directory `/home/pon/qca/qca.git/qsdk'

make: *** [package/utils/pfring/compile] 错误 2

原因:

没有编译平台信息;

解决:

在编译平台上运行uname -m,查看平台信息,将其放在--host=后面

修改文件package/utils/pfring/src/userland/Makefile,增加--host=arm

lib/Makefile:

        ./configure --host=arm

 

错误4

ar rs libpfring.a pfring.o pfring_mod.o pfring_utils.o pfring_mod_stack.o pfring_hw_filtering.o pfring_hw_timestamp.o pfring_mod_sysdig.o          `ar t ../nbpf/libnbpf.a | grep -F .o | tr '\n' ' '`

ranlib libpfring.a

=*= making library libpfring.so =*=

gcc -Wl,-soname,libpfring.so.1 -g -shared pfring.o pfring_mod.o pfring_utils.o pfring_mod_stack.o pfring_hw_filtering.o pfring_hw_timestamp.o pfring_mod_sysdig.o          `ar t ../nbpf/libnbpf.a | grep -F .o | tr '\n' ' '` -lpthread  -lrt -ldl -lnl-genl-3 -lnl-3    -o libpfring.so

/usr/bin/ld: error: cannot find -lnl-genl-3

/usr/bin/ld: error: cannot find -lnl-3

collect2: ld returned 1 exit status

make[5]: *** [libpfring.so] Error 1

make[5]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/userland/lib'

make[4]: *** [libpfring] Error 2

make[4]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/userland'

make[3]: *** [all] Error 2

make[3]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring'

make[2]: *** [/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/.built] Error 2

make[2]: Leaving directory `/home/pon/qca/qca.git/qsdk/package/utils/pfring'

make[1]: *** [package/utils/pfring/compile] Error 2

make[1]: Leaving directory `/home/pon/qca/qca.git/qsdk'

make: *** [package/utils/pfring/compile] 错误 2

 

思路:

提示缺少两个库libnl-genl-3.so,libnl-3.so

pon@ubuntu:~/qca/qca.git/qsdk/build_dir$ find -name libnl-genl-3.so

./target-arm_cortex-a7_uClibc-1.0.14_eabi/libnl-3.2.21/ipkg-install/usr/lib/libnl-genl-3.so

./target-arm_cortex-a7_uClibc-1.0.14_eabi/libnl-3.2.21/lib/.libs/libnl-genl-3.so

pon@ubuntu:~/qca/qca.git/qsdk/build_dir$

pon@ubuntu:~/qca/qca.git/qsdk/build_dir$ find -name libnl-3.so

./target-arm_cortex-a7_uClibc-1.0.14_eabi/libnl-3.2.21/ipkg-install/usr/lib/libnl-3.so

./target-arm_cortex-a7_uClibc-1.0.14_eabi/libnl-3.2.21/lib/.libs/libnl-3.so

pon@ubuntu:~/qca/qca.git/qsdk/build_dir$

 

搜索文档发现是有有这两个库,只是编译过程中没有找到这两个库;

在package/utils/pfring/src/userland/configure:3605行通过-L加入.so绝对路径,编程错误提示

unsupported ELF machine number 40

 

考虑此处应该引用编译平台的库文件。在系统/usr/lib下没有找到libnl-genl-3.so和libnl-3.so,通过下面命令按照这两个库

sudo apt-get install libnl-3-dev

sudo apt-get install libnl-genl-3-dev

 

然后编译通过,编译后运行

file pfring/userland/lib/libpfring.so

pfring/userland/lib/libpfring.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x889bffb8f6b7d868873ea99fa9cfd5a0cd91a8e0, not stripped

说明没有通过交叉编译生产lib库;

 

在package/utils/pfring/src/userland/Makefile中make增加参数

make CROSS_COMPILE=arm-openwrt-linux-uclibcgnueabi- ARCH=arm

 

错误5

编译后

cc1: note: someone does not honour COPTS correctly, passed 0 times

=*= making library libpfring.a =*=

ar rs libpfring.a pfring.o pfring_mod.o pfring_utils.o pfring_mod_stack.o pfring_hw_filtering.o pfring_hw_timestamp.o pfring_mod_sysdig.o          `ar t ../nbpf/libnbpf.a | grep -F .o | tr '\n' ' '`

ranlib libpfring.a

=*= making library libpfring.so =*=

arm-openwrt-linux-uclibcgnueabi-gcc -Wl,-soname,libpfring.so.1 -g -shared pfring.o pfring_mod.o pfring_utils.o pfring_mod_stack.o pfring_hw_filtering.o pfring_hw_timestamp.o pfring_mod_sysdig.o          `ar t ../nbpf/libnbpf.a | grep -F .o | tr '\n' ' '` -lpthread  -lrt -ldl -lnl-genl-3 -lnl-3    -o libpfring.so

/home/pon/qca/qca.git/qsdk/staging_dir/toolchain-arm_cortex-a7_gcc-4.8-linaro_uClibc-1.0.14_eabi/lib/gcc/arm-openwrt-linux-uclibcgnueabi/4.8.3/../../../../arm-openwrt-linux-uclibcgnueabi/bin/ld: nbpf_mod_rdif.o: Relocations in generic ELF (EM: 3)

/home/pon/qca/qca.git/qsdk/staging_dir/toolchain-arm_cortex-a7_gcc-4.8-linaro_uClibc-1.0.14_eabi/lib/gcc/arm-openwrt-linux-uclibcgnueabi/4.8.3/../../../../arm-openwrt-linux-uclibcgnueabi/bin/ld: nbpf_mod_rdif.o: Relocations in generic ELF (EM: 3)

nbpf_mod_rdif.o: error adding symbols: File in wrong format

collect2: error: ld returned 1 exit status

make[5]: *** [libpfring.so] Error 1

make[5]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/userland/lib'

make[4]: *** [libpfring] Error 2

make[4]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/userland'

make[3]: *** [all] Error 2

make[3]: Leaving directory `/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring'

make[2]: *** [/home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/.built] Error 2

make[2]: Leaving directory `/home/pon/qca/qca.git/qsdk/package/utils/pfring'

make[1]: *** [package/utils/pfring/compile] Error 2

make[1]: Leaving directory `/home/pon/qca/qca.git/qsdk'

make: *** [package/utils/pfring/compile] 错误 2

原因:

file pfring/userland/lib/nbpf_mod_rdif.o,

nbpf_mod_rdif.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not strippe

说明没有按照交叉编译编译生成nbpf_mod_rdif.o

解决:

修改/pfring/src/userland/nbpf/Makefile文件“

CC=arm-openwrt-linux-uclibcgnueabi-gcc

 

错误6

编译成功后,将其拷贝到/usr/lib下会出现下面错误:

install -d -m0755 /home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/ipkg-ipq806x/pfring/usr/lib

cp -fpR /home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/userland/lib/*.so /home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/ipkg-ipq806x/pfring/usr/lib

find /home/...../build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/pfring/ipkg-ipq806x/pfring -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf

Package pfring is missing dependencies for the following libraries:

libnl-3.so.200

libnl-genl-3.so.200

libpthread.so.1

librt.so.1

 

解决方法:

在/usr/lib下有libnl-3.so.200,libnl-genl-3.so.200,libpthread.so.1,librt.so.1,但需要建立软连接;

这四个文件存在于文件系统中,如下:

build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/root-ipq806x/usr/lib/libnl-3.so.200

uild_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/root-ipq806x/usr/lib/libnl-genl-3.so.200

build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/root-ipq806x/lib/libpthread.so.1

build_dir/target-arm_cortex-a7_uClibc-1.0.14_eabi/root-ipq806x/lib/librt.so.1

将其拷贝到下面文件下:

/package/utils/pfring/src/userland/deplib,

并修改

package/utils/pfring/Makefile,增加下面代码:

$(CP) $(PKG_BUILD_DIR)/userland/deplib/* $(1)/usr/lib

转载于:https://www.cnblogs.com/mahj/p/8392500.html

卷 share 的文件夹 PATH 列表 卷序列号为 00000231 0A51:3C3D V:. │ common.h │ common_types.h │ config.h │ tree.txt │ typedefs.h │ ├─common_audio │ │ common_audio.sln │ │ common_audio.vcxproj │ │ common_audio.vcxproj.filters │ │ │ ├─include │ │ audio_util.h │ │ │ ├─resampler │ │ │ sinc_resampler_neon.cc │ │ │ sinc_resampler_sse.cc │ │ │ sinusoidal_linear_chirp_source.cc │ │ │ sinusoidal_linear_chirp_source.h │ │ │ │ │ └─include │ │ resampler.h │ │ │ ├─signal_processing │ │ │ complex_bit_reverse.c │ │ │ complex_bit_reverse_arm.S │ │ │ complex_bit_reverse_mips.c │ │ │ complex_fft.c │ │ │ complex_fft_mips.c │ │ │ complex_fft_tables.h │ │ │ copy_set_operations.c │ │ │ cross_correlation.c │ │ │ cross_correlation_mips.c │ │ │ cross_correlation_neon.S │ │ │ division_operations.c │ │ │ dot_product_with_scale.c │ │ │ downsample_fast.c │ │ │ downsample_fast_mips.c │ │ │ downsample_fast_neon.S │ │ │ energy.c │ │ │ filter_ar_fast_q12_armv7.S │ │ │ filter_ar_fast_q12_mips.c │ │ │ get_scaling_square.c │ │ │ min_max_operations_mips.c │ │ │ min_max_operations_neon.S │ │ │ randomization_functions.c │ │ │ real_fft.c │ │ │ refl_coef_to_lpc.c │ │ │ resample.c │ │ │ resample_48khz.c │ │ │ resample_by_2.c │ │ │ resample_by_2_internal.c │ │ │ resample_by_2_internal.h │ │ │ resample_by_2_mips.c │ │ │ resample_fractional.c │ │ │ splitting_filter.c │ │ │ spl_init.c │ │ │ spl_sqrt.c │ │ │ spl_sqrt_floor.c │ │ │ spl_sqrt_floor_arm.S │ │ │ spl_sqrt_floor_mips.c │ │ │ vector_scaling_operations.c │ │ │ vector_scaling_operations_mips.c │ │ │ vector_scaling_operations_neon.S │ │ │ │ │ └─include │ │ real_fft.h │ │ signal_processing_library.h │ │ spl_inl.h │ │ spl_inl_armv7.h │ │ spl_inl_mips.h │ │ │ └─vad │ │ vad_core.c │ │ vad_core.h │ │ vad_filterbank.c │ │ vad_filterbank.h │ │ vad_gmm.c │ │ vad_gmm.h │ │ vad_sp.c │ │ vad_sp.h │ │ webrtc_vad.c │ │ │ └─include │ webrtc_vad.h │ ├─modules │ │ audio_processing.vcxproj │ │ audio_processing.vcxproj.filters │ │ │ └─audio_processing │ ├─aec │ │ │ aec_core.c │ │ │ aec_core.h │ │ │ aec_core_internal.h │ │ │ aec_core_sse2.c │ │ │ aec_rdft.c │ │ │ aec_rdft.h │ │ │ aec_rdft_sse2.c │ │ │ aec_resampler.c │ │ │ aec_resampler.h │ │ │ echo_cancellation.c │ │ │ echo_cancellation_internal.h │ │ │ │ │ └─include │ │ echo_cancellation.h │ │ │ ├─aecm │ │ │ aecm_core.c │ │ │ aecm_core.h │ │ │ aecm_core_c.c │ │ │ aecm_core_mips.c │ │ │ aecm_core_neon.c │ │ │ aecm_core_neon.S │ │ │ aecm_core_neon_offsets.c │ │ │ aecm_defines.h │ │ │ echo_control_mobile.c │ │ │ │ │ └─include │ │ echo_control_mobile.h │ │ │ ├─agc │ │ │ analog_agc.c │ │ │ analog_agc.h │ │ │ digital_agc.c │ │ │ digital_agc.h │ │ │ │ │ └─include │ │ gain_control.h │ │ │ ├─include │ │ audio_processing.h │ │ mock_audio_processing.h │ │ │ ├─ns │ │ │ defines.h │ │ │ noise_suppression.c │ │ │ noise_suppression_x.c │ │ │ nsx_core.c │ │ │ nsx_core.h │ │ │ nsx_core_neon.c │ │ │ nsx_core_neon.S │ │ │ nsx_core_neon_offsets.c │ │ │ nsx_defines.h │ │ │ ns_core.c │ │ │ ns_core.h │ │ │ windows_private.h │ │ │ │ │ └─include │ │ noise_suppression.h │ │ noise_suppression_x.h │ │ │ └─utility │ delay_estimator.c │ delay_estimator.h │ delay_estimator_internal.h │ delay_estimator_wrapper.c │ delay_estimator_wrapper.h │ fft4g.c │ fft4g.h │ ring_buffer.c │ ring_buffer.h │ └─system_wrappers ├─interface │ compile_assert_c.h │ cpu_features_wrapper.h │ cpu_info.h │ └─source cpu_features.cc system_wrappers.vcxproj system_wrappers.vcxproj.filters 这是一个代码工程,在linux x86架构上,交叉编译arm平台的动态库,写一个makefile文件
最新发布
08-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值