首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从c++代码生成arm64-v8a 64位共享对象?

如何从c++代码生成arm64-v8a 64位共享对象?
EN

Stack Overflow用户
提问于 2019-06-01 05:10:10
回答 1查看 712关注 0票数 1

我在我的安卓应用上使用c++库已经有一段时间了,但它一直在使用32位。我现在正在尝试将c++库编译为64位.so文件,但每次执行ndk-build时,我确实看到armeabi-v7a成功生成,但当arm64-v8a尝试编译时,它失败了,并给我以下错误消息:

libfftw3.a: error adding symbols: File in wrong format collect2: error: ld returned 1 exit status

我将分别放在我的Application.mkAndroid.mk下面,以显示我已经做了什么来尝试正确地做到这一点。

Application.mk

代码语言:javascript
复制
APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION=4.9
APP_CPPFLAGS += -frtti
APP_PLATFORM := android-23
APP_CPPFLAGS += -std=c++11
APP_ABI := armeabi-v7a arm64-v8a
APP_MODULES := SCCpp

Android.mk

代码语言:javascript
复制
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
CXXFLAGS += -arch x86_64 -arch i386
LOCAL_MODULE := fftw3
LOCAL_SRC_FILES := ../lib/libfftw3.a
LOCAL_EXPORT_C_INCLUDES = $(LOCAL_PATH)/..
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

GLOBAL_C_INCLUDES := \
  $(LOCAL_PATH)/../src

LOCAL_SRC_FILES += ../src/d/re.cpp
LOCAL_SRC_FILES += ../src/d/me.cpp
LOCAL_SRC_FILES += ../src/d/ev.cpp
LOCAL_SRC_FILES += ../src/d/fe.cpp
LOCAL_SRC_FILES += ../src/fft/fourier.cpp
LOCAL_SRC_FILES += ../src/nu/ac.cpp
LOCAL_SRC_FILES += ../src/nu/st.cpp
LOCAL_SRC_FILES += ../src/utils/converter.cpp
LOCAL_SRC_FILES += ../src/sci.cpp

LOCAL_MODULE := SCCpp
LOCAL_MODULE_FILENAME := libSCCpp

LOCAL_STATIC_LIBRARIES := fftw3

LOCAL_CPP_FEATURES += exceptions
LOCAL_CFLAGS += -fopenmp
LOCAL_CFLAGS += -Ofast
LOCAL_LDFLAGS += -fopenmp -t
LOCAL_CPPFLAGS :=  -std=c++11
LOCAL_LDLIBS += -latomic -llog
LOCAL_C_INCLUDES := $(GLOBAL_C_INCLUDES) $(LOCAL_PATH)/../../../3rdParty/fftw-3.3.4-dll32/
LOCAL_EXPORT_CPPFLAGS := -fexceptions -frtti

include $(BUILD_SHARED_LIBRARY)

我对整个过程真的不熟悉,所以我走进了死胡同,特别是因为日志根本没有告诉我任何事情。我认为只需添加arm64-v8a就可以自动生成64位共享对象。有遗漏的一步吗?

如果我应该提供任何遗漏的信息,请在评论中询问,以便我可以提供更多细节,但在我目前的位置上,这是我在c++库的代码库中接触到的所有内容,所以我不太确定所有的部分现在在哪里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-01 16:53:01

中使用了预构建库。

代码语言:javascript
复制
../lib/libfftw3.a

您还必须为arm64构建fftw3。通常我们有

代码语言:javascript
复制
 LOCAL_SRC_FILES := ../lib/$(TARGET_ARCH_ABI)/libfftw3.a

以便ndk-build可以选择第三方库正确变体。

有关为arm64构建fftw3的说明,请参阅on GitHub

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56401768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档