अब एंड्रॉइड स्टूडियो 2.2 आधिकारिक तौर पर जारी किया गया है, मैं एएस के भीतर सीएमके को आजमाने और उपयोग करने के लिए अपनी पुरानी एनडीके-बिल्ड प्रक्रिया से माइग्रेट कर रहा हूं। चूंकि मैं अपनी कंपनी के भीतर से कई कोडबेस शामिल कर रहा हूं (जिसे मैं संपादित नहीं कर सकता) जो सी ++ 11 कोड का भारी उपयोग करता है (डरावनी std :: to_string() विधि सहित), मैं संकलित कर सकता हूं कुछ चुनिंदा कॉन्फ़िगरेशन विकल्प - जिनमें से सभी मैंने पहले खोज की थी जब ndk-build के साथ काम शुरू किया था। (नीचे देखें)एंड्रॉइड स्टूडियो सीएमके - साझा लाइब्रेरी libC++ _ shared.so? क्या सीएमके इसे बंडल कर सकता है?
तो सब कुछ फिर से संकलित करता है और एपीके में बनाता है - और मैं 100% सत्यापित करता हूं कि मेरी आउटपुट साझा लाइब्रेरी एपीके में मौजूद है, लेकिन मैं सफलतापूर्वक System.loadLibrary('mylibrary')
का उपयोग करने में असमर्थ हूं - और यह पता चला है क्योंकि यह इसलिए है निर्भरता libC++ _ shared.so गुम है।
में के रूप में, मैं निम्नलिखित त्रुटि मिलती है:
java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
मेरे पुराने NDK-निर्माण प्रक्रिया में, मैं हमेशा 2 पुस्तकालयों (mylibrary.so और libC++ _ shared.so साथ समापन) मेरे आउटपुट फ़ोल्डर में, जिससे ऐप में एक साथ बंडल हो गया। ऐसा लगता है कि सीएमके टूलचेन libC++ _ shared.so बंडल नहीं कर रहा है (वास्तव में, यह एपीके में नहीं मिला है)।
मैं 6 घंटे के लिए इस पर अपने सिर को टक्कर लगी हूं। क्या मैं किसी भी तरह से इस लापता पुस्तकालय को बंडल करने के लिए सीएमके टूलचैन प्राप्त कर सकता हूं? कोई सुराग?
।
।
मेरी सेटिंग्स:
gradle.build में:
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared', '-DANDROID_TOOLCHAIN=gcc', '-DANDROID_PLATFORM=android-16'
}
}
और मेरे CMakeLists.txt (फ़ाइल नाम संक्षिप्तता के लिए बाहर काट):
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=gnu++11")
include_directories(.)
include_directories(./other)
set(my_SRCS jniInterface.cpp
etc.cpp)
add_library(mylibrary SHARED ${my_SRCS})
target_link_libraries(mylibrary atomic log)
यह एंड्रॉइड स्टूडियो सीएमके एकीकरण में एक ज्ञात मुद्दा है: https://code.google.com/p/android/issues/detail?id=214664 –
आप यह देखने का प्रयास कर सकते हैं कि यह एक है: https://github.com/googlesamples/android-ndk/pull/298 आपके लिए काम कर सकता है। ऐसा करने के लिए और भी कुछ हो सकता है, यह देखने का प्रयास करें कि क्या यह – Gerry
पल के लिए आपकी मदद कर सकता है धन्यवाद @ गेरी जो वास्तव में काम करता है। मैं इस धागे के वैकल्पिक उत्तर में किए गए परिवर्तनों को तैयार कर सकता हूं .. :-) – Mete