小编roc*_*row的帖子

ndk-build输出错误添加符号.文件格式错误'

我想在我的Android项目中使用用C++编写的exiv2库.为此,我尝试使用Android NDK交叉编译库.

对于交叉编译,我遵循以下步骤:

  1. 将ndk路径添加到变量PATH

    $ PATH="/home/patrycja/android-packages/ndk:${PATH}"
    $ export PATH 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装标准工具链,用于交叉编译适用于Android的C/C++.

    ./make-standalone-toolchain.sh --platform=android-21 --install-dir=/tmp/my-android-toolchain --ndk-dir='/home/patrycja/android-packages/ndk/' --toolchain=arm-linux-androideabi-4.9 --system=linux-x86_64
    
    Copying prebuilt binaries...
    Copying sysroot headers and libraries...
    Copying c++ runtime headers and libraries...
    Copying files to: /tmp/my-android-toolchain
    Cleaning up...
    Done.
    
    Run Code Online (Sandbox Code Playgroud)
  3. 设置一些环境变量,以便配置和构建过程将使用正确的编译器.

    $ export PATH=/tmp/my-android-toolchain/bin:$PATH
    $ export CC="arm-linux-androideabi-gcc"
    $ export CXX="arm-linux-androideabi-g++"
    $ export CFLAGS='-mthumb -O2' 
    $ export CXXFLAGS='-mthumb -O2' 
    $ export LDFLAGS='-Wl,--fix-cortex-a8' 
    $ export LIBS='-lstdc++ -lsupc++' 
    
    Run Code Online (Sandbox Code Playgroud)
  4. Bulid静态库和足够的标头

    ./configure --prefix=$(pwd)/build --host=arm-linux-androideabi --disable-shared --disable-xmp --disable-nls
    
    Run Code Online (Sandbox Code Playgroud)

结果我创建了'build'类别文件:

    ??? bin
    ?   ??? exiv2
    ??? include
    ?   ??? exiv2 …
Run Code Online (Sandbox Code Playgroud)

c++ android exiv2 android-ndk

6
推荐指数
1
解决办法
1万
查看次数

如何使用 Android ExifInterface 删除 exif 标签

目前我正在开发具有删除 EXIF 标签功能的 Android 应用程序。内置的 Android 库 (android.media.ExifInterface) 不允许这样做。只能编辑现有值。这就是为什么我认为我可以用一些空值(例如空字符串、空格、零)覆盖它们。EXIF 规范中的标签具有不同的类型,我无法用相同的值覆盖它们。

请参阅: http ://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html

经过一些测试后,我用下面提供的空值替换了数据(按照开头显示的格式)。在评论中我指定了相应标签的类型。

private static final Map<String, String> emptyValues = new HashMap<String, String>();
static {
    emptyValues.put(ExifInterface.TAG_APERTURE, "0"); //rational64u
    emptyValues.put(ExifInterface.TAG_DATETIME, ""); //string
    emptyValues.put(ExifInterface.TAG_EXPOSURE_TIME, "0.0000" ); //rational64u
    emptyValues.put(ExifInterface.TAG_FLASH, "0" ); //int16u
    emptyValues.put(ExifInterface.TAG_FOCAL_LENGTH, " 0/0" ); //rational64u
    emptyValues.put(ExifInterface.TAG_GPS_ALTITUDE, "0/0" ); //rational64u
    emptyValues.put(ExifInterface.TAG_GPS_ALTITUDE_REF, "0" ); //string[2]
    emptyValues.put(ExifInterface.TAG_GPS_LATITUDE, "0/0,0/0000,00000000/00000" ); // rational64u
    emptyValues.put(ExifInterface.TAG_GPS_LATITUDE_REF, "0" ); //string[2]
    emptyValues.put(ExifInterface.TAG_GPS_LONGITUDE, "0/0,0/0,000000/00000 " ); //rational64u
    emptyValues.put(ExifInterface.TAG_GPS_LONGITUDE_REF, "0" ); //sting[2]
    emptyValues.put(ExifInterface.TAG_GPS_TIMESTAMP, "0:0:0 " ); //rational64u[3]
    emptyValues.put(ExifInterface.TAG_GPS_PROCESSING_METHOD, "0" ); //undef …
Run Code Online (Sandbox Code Playgroud)

java android exif

5
推荐指数
1
解决办法
2238
查看次数

标签 统计

android ×2

android-ndk ×1

c++ ×1

exif ×1

exiv2 ×1

java ×1