精华内容
下载资源
问答
  • 确保您的应用支持 64 设备 https://developer.android.google.cn/distribute/best-practices/develop/64-bit 环境搭建 下载使用Cygwin,安装make,gcc等必要组件 使用VS自带的make Makefile教程参考:...

    确保您的应用支持 64 位设备

    https://developer.android.google.cn/distribute/best-practices/develop/64-bit

    环境搭建

    下载使用Cygwin,安装make,gcc等必要组件

    使用VS自带的make

    Makefile教程参考:https://blog.csdn.net/weixin_38391755/article/details/80380786

    如此看来 Android.mk 和 Application.mk 只是自定义格式的Makefile文件,相关教程:https://www.cnblogs.com/SoaringLee/p/10532102.html

    下载并配置NDK,参考:

    https://blog.csdn.net/fengbingchun/article/details/44491763

    https://www.cnblogs.com/exmyth/p/3576731.html

    配置Makefile文件,参考第三方库官网要求

    编译32位和64位版本时设置架构参数为:

    APP_ABI := armeabi-v7a arm64-v8a

    遇到的坑:

    1、出包成功后测试64位包运行状况,出现了读取资源闪退的情况,追踪后发现是 unsigned long类型的坑,即unsigned long int,该类型在32位系统长度为32位,64位系统长度为64位。导致读取文件头长度出错。改为unsigned int,固定为32位就好了。

    2、指针类型转换出错,有些代码将64位的指针的值强制转换成了u32类型,改成转换成size_t即可改成跨平台的类型。

    展开全文
  • 1、交叉编译工具 下载/生成android ndk,我使用的是android-ndk-r12b,平台支持从android-9到android-24 二、编译过程 1、指定编译工具链 CC_HOME=/home/waitor/tool/android-ndk-r12b BIN_PATH=$(CC_HOME...

    一、准备工作

      1、交叉编译工具

      下载/生成android ndk,我使用的是android-ndk-r12b,平台支持从android-9到android-24

     

    二、编译过程

      1、指定编译工具链

    CC_HOME=/home/waitor/tool/android-ndk-r12b
    BIN_PATH=$(CC_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin
    
    CC=${BIN_PATH}/aarch64-linux-android-gcc
    CXX=${BIN_PATH}/aarch64-linux-android-g++
    AS=${BIN_PATH}/aarch64-linux-android-as

      2、汇编选项

    CFLAGS=-O3 -Wall -I ${CC_HOME}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/lib/gcc/aarch64-linux-android/4.9.x/include -I ${CC_HOME}/sources/cxx-stl/system/include -I ${CC_HOME}/sources/cxx-stl/stlport/stlport  --sysroot=${NDK_HOME}/platforms/android-21/arch-arm64

    注:由于从android-21才开始支持arm64,所以低版本有可能不兼容。

      3、链接选项

    LFLAGS=--sysroot=${NDK_HOME}/platforms/android-21/arch-arm64 -lsupc++ -L $(CC_HOME)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a

    若还需要链接其他库,需要在ndk中寻找;在ndk中找不到libxxx.so时应更新ndk版本,或者自己编译好后直接动态链接。

      4、编译与链接

    src=test.c tool.c src.c
    objs=test.o tool.o src.o
    out=libtest.so
    
    #=========================
    %.o: %.c
        $(CC) -fPIC -share $(CFLAGS) -c -o $@ $<
    
    $(out): $(objs)
        $(CC) $(CFLAGS) -share -fPIC $(out) $(objs) $(LFLAGS)
    

      5、验证

       对生成的%.o 和libxx.so用file命令查看

    ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped

        可以看到生成的是64位ELF文件。 

    三、问题总结

       1、unknown mnemonic `xxxx'

            原因为目标架构不支持该汇编指令,需要手动调整汇编代码,或者重新生成汇编代码。某些框架编译时其文件目录就包含有多种架构多种指令集,如armv4、x86、x86_64、v8-armx-64、ia64等命名文件,只需要在编译时指定编译该文件即可。

    展开全文
  • Create a chrooted environment · JdeRobot_JdeRobot Wiki BasicChroot - Community Help Wiki

    Create a chrooted environment · JdeRobot_JdeRobot Wiki

    BasicChroot - Community Help Wiki

    展开全文
  • arm64位aarch64 交叉编译openssh

    千次阅读 2019-03-17 15:03:16
    arm64位aarch64 交叉编译ssh依赖openssl编译部署openssl测试zlib编译部署openssh编译部署遇到的问题 依赖 ssh由openssh交叉编译 openssh依赖zlib和openssl两个 分别提供压缩和加密的功能 需要先交叉编译这两个...

    依赖库

    ssh由openssh交叉编译
    openssh依赖zlibopenssl两个库
    分别提供压缩和加密的功能
    需要先交叉编译这两个库

    网上提到的很多编译方法似乎都不适用aarch64,这里重新总结一下

    openssl

    编译

    可以从官方的github下载比较新的release版本
    https://github.com/openssl/openssl/releases
    下载tar.gz压缩包

    <配置自己工具链的环境变量>
    <保证aarch64-linux-gnu- tab键能自动补全就可以,不需要CROSS_COMPILE CC CXX等环境变量>
    tar -xzf openssl-OpenSSL_1_1_1a.tar.gz 
    cd openssl-OpenSSL_1_1_1a/
    ./Configure linux-aarch64 --cross-compile-prefix=aarch64-linux-gnu- --prefix=/home/wjk/install/openssl shared
    make
    make install
    

    这里比较容易出问题的是./Configure,四下寻找才找到正确的配置方法

    • linux-aarch64是指定平台,
    • –cross-compile-prefix是工具链前缀
    • –prefix是执行make install的安装路径
    • shared是指定要生成共享库

    执行make install后会将生成的文件复制到选定路径,主要包括

    • bin里面是几个工具
    • include里面是头文件,我们在PC上交叉编译时将需要指定这个头文件搜索路径
    • lib里面是静态库和共享库
    • share和ssl里面不知道是什么,似乎是文档

    部署

    sudo cp -a 可以保留动态库的软连接
    将lib里面的共享库需要复制到机器里面,并且添加共享库的搜索路径
    我的机器是放到了/usr/openssl/lib里面
    在/etc/profile添加这个库的搜索路径

    export SSL_LDPATH=/usr/openssl/lib/
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SSL_LDPATH
    

    openssl测试

    可以写简单的代码测试ssl是否可以正确工作
    ssltest.cpp

    #include <stdio.h>
    #include <string.h>
    #include <openssl/rand.h>
    
    int main(int argc,char*argv[])
    {
        unsigned char buf[10];
        int num = 10;
        int res;
        res = RAND_bytes(buf,num);
        if(res == 1)
        {
            printf("Succeed to generate rand with openssl\n");
            for(const auto &i:buf)
            {
                printf("%0x\n",i);
            }
        }
        else
            printf("fail to generate,wrong with openssl\n");
        return 0;
    }
    

    makefile如下

    CC = $(CROSS_COMPILE)gcc
    CXX = $(CROSS_COMPILE)g++
    Q = 
    CFLAGS = -g -Wall -std=c++11 
    TARGET = ssltest
    SRC = ssltest.cpp
    
    LIBS := -lssl -lcrypto
    LIBPATH := -L ../../install/openssl/lib/
    INCLUDE := -I ../../install/openssl/include/ 
    
    OBJ := $(subst .cpp,.o,$(SRC))
    OBJ := $(subst .c,.o,$(OBJ))
    
    $(TARGET):$(OBJ)
    	$(Q)$(CC) -o $@ $^ $(LIBS) $(LIBPATH)
    	$(Q)echo compiled over
    
    %.o:%.c
    	$(Q)$(CC) -c $(CFLAGS) $< -o $@
    
    %.o:%.cpp
    	$(Q)$(CXX) -c $(CFLAGS) $< -o $@ $(INCLUDE) 
    
    .PHONY:clean
    clean:
    	rm -f *.o
    	rm -f $(TARGET)
    

    zlib

    zlib是负责压缩的库
    可以从官网下载源码,他们似乎提供交叉编译好的库,but我还是决定自己编译一下
    http://www.zlib.net/
    需要vpn才能上去官网

    编译

    https://github.com/djp952/prebuilt-libz
    这个文章说了各个平台的编译方法,根据自己的需求做了修改

    export CROSS_COMPILE=aarch64-linux-gnu-
    export CC=aarch64-linux-gnu-gcc
    export AR=aarch64-linux-gnu-ar
    export RANLIB=aarch64-linux-gnu-gcc-ranlib
    CFLAGS="-fPIC" ./configure --shared --prefix=/home/wjk/install/zlib
    make
    make install
    

    -fPIC是说生成位置无关码,其他和openssl类似

    部署

    类似sudo cp -a 命令共享库复制到机器端/usr/zlib/lib里面
    修改/etc/profile

    export SSL_LDPATH=/usr/openssl/lib/
    export ZLIB_LDPATH=/usr/zlib/lib/
    export LD_LIBRARY_PATH=$SSL_LDPATH:$ZLIB_LDPATH
    

    openssh

    官网下载
    https://www.openssh.com/portable.html

    这些链接随便选一个就可以,似乎第一个比较常用,在这里找比较新的版本

    编译

    ./configure --host=aarch64-linux-gnu --with-zlib=/home/wjk/install/zlib --with-ssl-dir=/home/wjk/install/openssl --disable-etc-default-login
    make
    

    这里的–host就说明了工具链的前缀,另外还需要指定刚刚编译的zlib和openssl的路径
    注意:openssh不需要make install

    部署

    openssh的部署步骤略复杂
    可以参考这个文章
    https://www.veryarm.com/892.html

    遇到的问题

    在最后一步我遇到了一些问题,
    运行ssh的各种命令都会报错
    No user exists for uid 0
    这个据说是ssh无法读取/etc/passwd这个文件导致

    我的原因是缺少了libnss_file这个库导致的,增加了以后就可以了
    比较奇怪的是我用aarch64-linux-gnu-readelf -d ssh并没有发现它依赖这个库,也没有发现它的子库会依赖这个库

    展开全文
  • 资料说的cmake,我也没有用,因为我用的是华为的容器编译的,立马的东西都设定好了,我也懒得加了,但是那个里面是没有cmake的,所以我就用make了。 1,修改makefile 2,make编译 3,make install安装,其实...
  • 1,下载,解压,不用多说; 2,配置,这个地方就要注意了 运行的是: ...json-c-master# ./configure CC=...就是修改了CC,不然默认是gcc,就不是交叉编译了。 3,编译-make 4,安装-make install 注意,这里...
  • cryptsetup依赖较多的,但是在交叉编译工具里面没有带,因此需要自己下载源码编译成可用的文件。 需要注意的是:如果下载的源码版本较低,可能在编译cryptsetup的时候会提示大量接口没有定义的错误。 注意...
  • 装好了64位版本及安装 Linux交叉编译工具链 运行GCC,${CROSS_COMPILE}gcc -v 依然会提示那经典的“没有那个文件或目录”提示。 根据以往的经验,对于64位版本ubuntu我们需要安装“ia32-libs”依赖。 遂输入...
  • 实现原理:android studio实现JNI规范的接口,再用这套接口去调用linux下编好的so,这个需要linux调用NDK中的交叉编译工具链进行交叉编译生成so; 步骤: 1.NDK安装在linux环境上(ubuntu 14.04 64位系统) 通常...
  • LZ4源码交叉编译

    2020-05-27 17:48:17
    #解压缩 tar xf v$lz4_version.tar.gz touch imx_arm imx_arm64 #交叉编译 32 位库 make lib CC=arm-linux-androideabi-gcc -j $(grep "cpu cores" /proc/cpuinfo | wc -l) ...#交叉编译 64 位库 make li..
  • 2.2:libjson-c依赖 2.2.1:libjson-c源码下载 libjson-c依赖的源码路径如下: http://www.linuxfromscratch.org/blfs/view/svn/general/json-c.html 点击下载,然后将下载的json-c-0.13.1.tar.gz文件...
  • 2.5:libdevmapper依赖 2.5.1:libdevmapper源码下载 libdevmapper的源码在以下路径 https://launchpad.net/ubuntu/+source/lvm2 如下: 点击下载,然后拷贝到tools目录,并解压: cp ../Desktop/lvm2_...
  • 2.4:libpopt依赖 2.4.1:libpopt源码下载 在tools目录执行: wget http://jaist.dl.sourceforge.net/project/cross-stuff/cross-stuff/1.0/popt-1.7.tar.gz 然后解压 tar -xzvf popt-1.7.tar.gz 解压后的...
  • 交叉编译ncurses

    千次阅读 2016-07-25 17:39:49
    (2) 主机ubutun 12.04 64位系统 (3) 新建ncurses, target目录mkdir $HOME/ncursesmkdir $HOME/ncurses/target二. 下载ncurses ncurses下载地址:http://ftp.gnu.org/pub/gnu/ncurses/ 我使用的是5.9版本...
  • 安装之后执行命令 arm-linux-gcc -v出现找不到编译工具 原因是交叉编译工具是32 位的但是咱们的系统是64位的这就需要下载安装一下32位的兼容,但是ubuntu16.04已经不支持ia32-libs的软件包...
  • 1、准备交叉编译环境环境说明:Windows 7 64位此过程需要:(1)Qt开源代码,我使用的是5.7.0版本;(2)Perl语言环境5.12版本以上;(3)Python语言环境 2.7 版本以上;(4)Windows平台上的MinGW开发工具集(内含本地...
  • 下载mingw需要的文件:64位 包括 具体可以参见mingw官方网站:http://mingw-w64.org/doku.php 注意下载mingw的依赖软件包 解压全部文件到一个文件夹,例如:/mydata 导出目录到环境变量: 将解压的...
  • 文章目录1、准备交叉编译环境1.1、下载Qt源代码1.2、安装Perl1.3、安装Python1.4、MinGW开发工具集1.5、安装交叉编译器2、交叉编译Qt2.1、编译前的处理2.2、编译之configure2.3、编译之make2.4、编译之make ...
  • 解决:将以下全部安装上 sudo apt-get install ia32-libs sudo apt-get install lib32z1 sudo apt-get install lsb-core sudo apt-get install lib32stdc++6 sudo apt-get install lz...
  • 在ubantu上进行交叉编译是一般会用到交叉编译器:例如arm-linux-gnueabihf-gcc。这样就会在x86 64位的架构下生成arm架构下可以执行的代码。 如果使用到交叉编译器中没有的,就会报错 在ubantu上安装后对应的...
  • 在Ubuntu18.04 64位安装arm-none-eabi交叉编译工具链,安装完成后,设置好环境变量,执行arm-none-eabi-gcc命令,提示“No such file or directory”。 问题原因: arm-none-eabi是32位的,而系统是64位的,所以不...
  • 我们都知道在不涉及 CGO 的时候,Go 的交叉编译非常简单,...例如,想在 Ubuntu 上交叉编译一个带有 CGO 的动态,目标 CPU 架构为 arm,我们该如何操作呢?示例代码# shared.gopackage mainimport "C"//export Sum...
  • MinGW和MSYS 安装Win64位中MinGW和MSYS的安装步骤 LAME(MP3编码) Shell编译的根目录创建test.sh文件 #! /bin/sh ./configure --host=arm-linux \ --disable-shared \ --disable-frontend \ --...
  • 交叉编译问题

    2019-01-23 11:46:00
    64位系统交叉编译openssl支持在32位目标板上运行需要设置下:setarch i386,否则会出错。 另外交叉编译支持https访问的curl: 1.编译libssl (1)./config no-asm shared --prefix=/workteam/qihualin/data...
  • 由于项目需要,需要在国产系统(银河麒麟系统--飞腾cpu-arm64)上用firefox加载一个npapi插件,而firefox是一个32的浏览器,而银河麒麟系统不支持编译32的动态,因此只能用交叉编译环境来编译arm32的动态。...
  • 如果编译pc是64位的系统,-m32选项可以实现在64位的系统上编译32位的。如果去掉该选项,那编译出来的就是64位;如果编译pc是32位的系统,直接去掉该选项,编译出的就是32位的。 CC=gcc AR=ar RANLIB=ranlib ...
  • 交叉编译libpcap

    2020-07-10 15:58:02
    因为这个交叉编译器是32位的,我开始使用64位的Linux系统,在编译时会有很多的问题,所以换成了32的Linux系统。 一、配置交叉编译器 1、解压缩gcc-4.5.1-v6-vfp-20101103.tgz,执行tar xvzfgcc.

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 202
精华内容 80
关键字:

交叉编译64位库