android elf 重定位,如何在ndk-build期间解析“通用ELF中的重定位”?

在尝试将独立工具链构建的静态库与Android项目结合时,遇到NDK编译错误,错误信息显示为'通用ELF中的重定位'问题。尽管库文件显示为正确的架构(ARM64),但在链接阶段仍失败。问题可能涉及到库的兼容性、编译选项或构建配置。应用.mk和Android.mk文件已提供,但未能解决问题。开发者正在寻找解决混合编译不同架构二进制文件问题的方法。
摘要由CSDN通过智能技术生成

我想建立一个静态库,使用独立的工具链为一个项目,它有自己的构建过程,然后我用C++库包装并暴露给Android(用ndk-build编译)。然而,在NDK生成步骤我收到以下错误:如何在ndk-build期间解析“通用ELF中的重定位”?

➜ jni /Users/chrisfosterelli/Library/Android/sdk/ndk-bundle/ndk-build

[arm64-v8a] Compile++ : wrapper <= wrapper.cpp

In file included from /Users/chrisfosterelli/workspace/android/jni/wrapper.cpp:9:

In file included from ../prebuild/include/valhalla/meili/universal_cost.h:7:

In file included from ../prebuild/include/valhalla/sif/dynamiccost.h:4:

In file included from ../prebuild/include/valhalla/baldr/directededge.h:5:

../prebuild/include/valhalla/baldr/graphconstants.h:432:11: warning: 21 enumeration values not handled in switch: 'kRoad', 'kRamp', 'kTurnChannel'... [-Wswitch]

switch (use) {

^

1 warning generated.

[arm64-v8a] SharedLibrary : libwrapper.so

/Users/chrisfosterelli/Library/Android/sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/ld: /Users/chrisfosterelli/workspace/android/jni/../prebuild/libvalhalla_meili.a(libvalhalla_meili_la-map_matcher_factory.o): Relocations in generic ELF (EM: 62)

[...above message repeated many times...]

/Users/chrisfosterelli/workspace/android/jni/../prebuild/libvalhalla_meili.a: error adding symbols: File in wrong format

clang++: error: linker command failed with exit code 1 (use -v to see invocation)

make: *** [/Users/chrisfosterelli/workspace/android/obj/local/arm64-v8a/libwrapper.so] Error 1

➜ jni ls /Users/chrisfosterelli/Library/Android/sdk/ndk-bundle/

此错误表示,据我所知道的,那我想混合编为不同的体系结构匹配的二进制文件。然而,从我可以告诉库是正确的体系结构:

[email protected]:/meili/meili2/newtest# ar x libvalhalla_meili.a

[email protected]:/meili/meili2/newtest# file libvalhalla_meili_la-map_matcher_factory.o

libvalhalla_meili_la-map_matcher_factory.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped

[email protected]:/meili/meili2/newtest#

FWIW,这是我目前的Application.mk,

APP_STL := c++_static

APP_CPPFLAGS := -frtti -std=gnu++11 -D_GLIBCXX_USE_C99

APP_CPPFLAGS += -fexceptions

NDK_TOOLCHAIN_VERSION := clang

APP_LDFLAGS := -latomic

APP_PLATFORM := android-21

APP_ABI := arm64-v8a

和Android.mk,

LOCAL_PATH := $(call my-dir)

# static library info

include $(CLEAR_VARS)

LOCAL_MODULE := libvalhalla_meili

LOCAL_SRC_FILES := ../prebuild/libvalhalla_meili.a

LOCAL_EXPORT_C_INCLUDES := ../prebuild/include

include $(PREBUILT_STATIC_LIBRARY)

# wrapper info

include $(CLEAR_VARS)

LOCAL_C_INCLUDES += ../prebuild/include

LOCAL_MODULE := wrapper

LOCAL_SRC_FILES := wrapper.cpp

LOCAL_STATIC_LIBRARIES := libvalhalla_meili

include $(BUILD_SHARED_LIBRARY)

任何想法如何解决这个?我尝试了很多东西,但所有这些都会导致更多(更隐晦)的错误,所以我希望这里有人能指出我正确的方向!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值