Qt 5.15.2 using SAME builtlibs directory for different ABIs
-
I'm trying to build my app using BOTH Armeabi-v7a and Arm64-v8a ABIs; however, I get a failure with the message:
C:\Users\vbonaventura\AppData\Local\Android\Sdk\ndk\21.3.6528147/toolchains/llvm/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ranlib: unable to rename '../../../builtlibs/android/libsxe.a'; reason: File exists
When I got and look to see what the generated makefiles (Makefile.Armeabi-v7a and Makefile.Arm64-v8a) are doing I found this:
Which is the EXACT same destination for BOTH and hence the libsxe.a library created there fails since it would need separate libraries for Arm64-v8a and Armeabi-v7a
Any suggestions?
-
@Vince_SiriusXM Do you do a complete rebuild after switching to another architecture?
-
@jsulm Yes definitely rebuilt from scratch! But I think I found my problem in part... in my defines.pri there is a variable LIBPATH which is used in all subsequent library *.pro files to define where their *.a files will output. Hence when building against 2 architectures there will be conflicts with the generated *.a files.
Is there a standard way to handle this with Qt? I see that the demo projects use *.so files for their libraries but I can't imagine I can't use static libraries. My understanding is Qt generates 2 executables for Android when selecting 2 architectures but then combines them into 1.WARNING: Targets of builds 'Armeabi-v7a' and 'Arm64-v8a' conflict: libsxe.a.
-
@Vince_SiriusXM I'm using
OBJECTS_DIR = generated/$${ANDROID_TARGET_ARCH}/obj
in my qmake based project. To separate the object files. I'm sure there is something similar for cmake.
try:
set(CMAKE_CXX_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/generated/${ANDROID_TARGET_ARCH}/obj)
-
@J-Hilk said in Qt 5.15.2 using SAME builtlibs directory for different ABIs:
@Vince_SiriusXM I'm using
OBJECTS_DIR = generated/$${ANDROID_TARGET_ARCH}/obj
in my qmake based project. To separate the object files. I'm sure there is something similar for cmake.
try:
set(CMAKE_CXX_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/generated/${ANDROID_TARGET_ARCH}/obj)
I am not using cmake, I'm using qmake as per QT5.15.2. Thank you for response!
What file did you add this command to? I assume your project's *.pro file? -
@Vince_SiriusXM
yes, I have a static library that results in conflicts when compiling for different apks and I found this solution. Haven't had a Problem with it since then.
Android section of the pro file:android { # Android Version code, needs to be upped by 1! ITERATION=24 ANDROID_VERSION_CODE = $$ITERATION QT += androidextras OBJECTS_DIR = generated/$${ANDROID_TARGET_ARCH}/obj .... LIBS += -L$$OUT_PWD/Dependencies/ThCommunication/ -lThCommunication_$${ANDROID_TARGET_ARCH} PRE_TARGETDEPS += $$OUT_PWD/Dependencies/ThCommunication/libThCommunication_$${ANDROID_TARGET_ARCH}.a .... }