অ্যান্ড্রয়েড এনডিকে ভেক্টরের মতো সি ++ শিরোনাম অন্তর্ভুক্ত করা যায় না


84

আমি যখন আমার অ্যান্ড্রয়েড এনডিকে প্রকল্পে ভেক্টরের মতো কোনও সি ++ শ্রেণি অন্তর্ভুক্ত করার চেষ্টা করি (সর্বশেষতম এনডিকে আর ৫ বি ব্যবহার করে), তখন আমি নীচের মতো একটি ত্রুটি পাই ...

Compile++ thumb : test-libstl <= test-libstl.cpp /Users/nitrex88/Desktop/Programming/EclipseProjects/STLTest/jni/test-libstl.cpp:3:18: error: vector: No such file or directory

অনলাইনে এই সমস্যাটি প্রকাশিত অন্যান্য ব্যক্তিরা যোগ করে সাফল্যের দাবি করেছেন

APP_STL := stlport_static

তাদের আবেদন.mk ফাইলটিতে। আমি এটি করেছিলাম পাশাপাশি অ্যাপ্লিকেশনের জন্য প্রতিটি অন্যান্য সম্ভাব্য মান চেষ্টা করেছি। আমি প্রজেক্টে পরিষ্কার করেছি, এনডিকে-বিল্ড ক্লিন করেছি, ওজেক্ট এবং লিবস ফোল্ডারগুলি মুছে ফেলেছি এবং এখনও যখন আমি সংকলন করব তখন এটি ভেক্টর শ্রেণিটি খুঁজে পাবে না। আমি এখন বেশ কয়েক সপ্তাহ ধরে এটি নিয়ে কাজ করছি (যেহেতু এনডি কে আর 5 প্রকাশিত হয়েছে) এবং কারও কোনও পরামর্শ থাকলে সত্যিই প্রশংসা করব। ধন্যবাদ!


4
প্রথমে, android-ndk-r5 \ build \ প্ল্যাটফর্মগুলি roid android- X\ খিলান-আর্ম \ usr directory ডিরেক্টরি অন্তর্ভুক্ত ডিরেক্টরি পরীক্ষা করুন - vectorসত্যিই আছে?
সেবা আলেকসেয়েভ

4
না এটা না! জেএনআই ব্যবহার এবং উত্সগুলি সংকলন করার বাইরে এনডিকে কীভাবে কাজ করে সে সম্পর্কে আমি বেশি কিছু জানি না। আমি কীভাবে সেখানে ভেক্টর পেতে পারি? আমি অ্যান্ড্রয়েড- ndk-r5b / উত্স / সিএক্সএক্স-স্টল / স্টল্পোর্ট / স্টল্পোর্টে ভেক্টর দেখি যদি এর অর্থ হয় তবে। দ্রুত উত্তর দেওয়ার জন্য ধন্যবাদ এবং আমি সত্যিই এটি প্রশংসা করি!
নাইট্রেক্স ৮

4
@ সেভা তাই আমি সরঞ্জামচেইন এবং প্রাকবিল্টগুলি পুনর্নির্মাণের জন্য বেশ কয়েকটি সরঞ্জাম চালানোর চেষ্টা করেছি (এনডি কে-র ফাইলগুলি। তিনি ফাইলগুলির ফোল্ডার) এবং এখনও এসটিএল শিরোনামগুলি কাজ করতে পারেনি। যদি আমি অ্যান্ড্রয়েড সাইট থেকে এনডিকে টাটকা ডাউনলোড করি তবে কি সবকিছুই কাজ করা উচিত নয়? আমি চেষ্টা করেছি এবং নতুন ডাউনলোডের ফলে কোনও পরিবর্তন হয় না। আপনি যে বিষয়টি অফার করতে পারেন তাতে আরও কোনও অন্তর্দৃষ্টি?
নাইট্রেক্স ৮৮

[এই আমি অ্যান্ড্রয়েড Froyo এর সাথে কাজ করা STLPort কনফিগার করা হয়েছে।] [1] [1]: stackoverflow.com/questions/1650963/ustl-or-stlport-for-android
ZhangXuelian

[এই আমি অ্যান্ড্রয়েড Froyo এর সাথে কাজ করা STLPort কনফিগার করা হয়েছে।] [1] [1]: stackoverflow.com/questions/1650963/ustl-or-stlport-for-android
ZhangXuelian

উত্তর:


121

এটা সম্ভব. এখানে ধাপে ধাপে কিছু:

ইন $ PROJECT_DIR / jni / Application.mk :

আমি stlport_shared ব্যবহার করার চেষ্টা করেছি, তবে ভাগ্য নেই। Libstdc ++ এর সাথে একই।

ইন $ PROJECT_DIR / jni / Android.mk :

এখানে বিশেষ কিছু নয়, তবে নিশ্চিত করুন যে আপনার ফাইলগুলি .cpp রয়েছে

ইন $ PROJECT_DIR / jni / হ্যালো-jni.cpp :

আমাকে এখানে কামড়ানোর একমাত্র জিনিস ছিল #ifdef __cplusplus।

ডিরেক্টরি দেখুন।

সংকলন করতে, ব্যবহার করুন ndk-build clean && ndk-build


4
ধন্যবাদ ধন্যবাদ!! আপনি আমার সমস্যাটি শেষ পর্যন্ত সমাধান করেছেন। আমার অ্যাপ্লিকেশন.এমকে ভুল জায়গায় পেয়ে গেছে! আমার কাছে এটি প্রজেক্ট ফোল্ডারে ছিল তবে জেএনআই ফোল্ডারে নেই (কেন আমি নিশ্চিত নই তবে যেহেতু আমি অ্যান্ড্রয়েড বিকাশ শুরু করেছি আমি সবসময় ভেবেছিলাম এটি সেখানে গেছে)। আপনি Jni ফোল্ডারে অ্যাপ্লিকেশন.এমকে রাখার বিষয়টি আমাকে উপলব্ধি করতে পেরেছিল। ধন্যবাদ এবং আপনি অনুগ্রহ পেতে!
নাইট্রেক্স

4
কেবল প্রয়োজনীয় অ্যাপ্লিকেশন.এমকে তৈরি করে এটি সমাধান হয়েছে তবে আমি বার্তাটি দেখতে পাচ্ছি Android NDK: You might want to use $NDK/build/tools/build-stlport.sh। দ্রষ্টব্য: এটি সাইগউইনের অধীনে কাজ করে নি
কেউ কোথাও

হ্যালো, আমি অ্যাপ্লিকেশন তৈরি করতে সক্ষম যা ভেক্টর ব্যবহার করছে is
CoDe

হ্যালো, আমি অ্যাপ্লিকেশন.এমকে ফাইলে এপিসিপিএল: = স্টল্পোর্ট_স্ট্যাটিক যুক্ত করেছি এবং এটি আমার অ্যাপ্লিকেশনটির জন্য কাজ করছে তবে একই অ্যাপ্লিকেশনটি আমি অ্যান্ড্রয়েড উত্সে অন্তর্ভুক্ত করেছি, এখানে কোডটি সংকলনের সময় এটি আমাকে ত্রুটি দিয়েছিল "ভেক্টর শ্রেণি পাওয়া যায় নি .."। প্লিজ আমাকে পরামর্শ দিচ্ছে যে কেউ এ সম্পর্কে ধারণা রাখে।
CoDe

4
সম্ভবত আপনি গিথুব এবং ইউআরএল ভাগ করতে আপনার প্রকল্পের একটি নমুনা আপলোড করতে পারেন, তবে আমরা একবার নজর দিতে পারি।
সেবাস্তিয়ান রথ

20

যদি আপনি এনড্রয়েড স্টুডিও ব্যবহার করছেন এবং আপনি এখনও এনডিকে ব্যবহার করে সংকলন করছেন যখন "ত্রুটি: ভেক্টর: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই" (বা অন্যান্য স্টিল সম্পর্কিত ত্রুটি) বার্তাটি দেখতে পাচ্ছেন, তবে এটি আপনাকে সহায়তা করতে পারে।

আপনার প্রকল্পে মডিউলটির বিল্ড.gradle ফাইলটি খুলুন (আপনার প্রকল্পের বিল্ড.গ্রেড নয়, তবে এটিই আপনার মডিউলের জন্য রয়েছে) এবং ডিফল্টকনফিগের এনডিকি উপাদানটির মধ্যে '' stlort_shared '' যুক্ত করুন।

যেমন:


4
কেন stlport_sharedএবং না stlport_static?
ইগোরগানাপলস্কি

9

আমি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করছি এবং ২০১ January সালের জানুয়ারী 19 পর্যন্ত এটি আমার পক্ষে কৌশলটি করেছে। (এটি এমন কিছুর মতো মনে হয় যা প্রতি বছর বা আরও কিছু পরিবর্তন হয়)

এতে যান: অ্যাপ -> গ্রেডল স্ক্রিপ্টস -> বিল্ড.gradle (মডিউল: অ্যাপ)

তারপরে model ... android.ndk model ... মডেলের অধীনে এবং একটি লাইন যুক্ত করুন: stl = "gnustl_shared"

এটার মত:


আরে আমি ffmpeg নিয়ে এই সমস্যাটি পাচ্ছি, আসলে এনডিকে বিল্ড ঠিকঠাক কাজ করছে এবং এর সাফল্যের সাথে উত্পন্ন হচ্ছে। সুতরাং ফাইলগুলি কিন্তু শিরোনামের ফাইলগুলি অনুপস্থিত রয়েছে সে সম্পর্কে আপনার কোনও ধারণা আছে? (আমি গ্রেড পরীক্ষামূলক প্লাগইন সহ অ্যান্ড্রয়েড স্টুডিও ব্যবহার করছি)
পুষ্পেন্দ্র

এটি গ্রেড-পরীক্ষামূলক প্লাগইন সহ?
সেবাস্তিয়ান রথ

এর gnustl_sharedবদলে কেন gnustl_static?
ইগোরগানাপলস্কি

কাজ করে, আমার ধারণা এটি উত্তর হিসাবে নির্বাচন করা উচিত।
বিষ্ণুদেব কে

আমি এটি অতি সাম্প্রতিক অ্যান্ড্রয়েড স্টুডিও ২.১.৩ দিয়ে চেষ্টা করে দেখেছি বলে মনে হচ্ছে না। এটি পরীক্ষা করার জন্য, আমি হ্যালোজেএনআই নমুনা অ্যাপ্লিকেশন নিয়েছি, হ্যালো-জনি.সি। এর নাম পরিবর্তন করে .cpp এবং এতে একটি # অন্তর্ভুক্ত <ওয়েকটার> যুক্ত করেছি। আমি ত্রুটিটি পেয়েছি: fatal error: 'vector' file not found #include <vector>মডিউলটির গ্রেড ফাইলটিতে stl = "gnustl_static" বা "gnustl_shared" যুক্ত করার পরে কি অতিরিক্ত কোনও পদক্ষেপের দরকার আছে?
SideLobe

4

এমনকি সেবাস্তিয়ানও আরও 3 বছর আগে সেখানে একটি ভাল উত্তর দিয়েছিল, আমি এখনও এখানে একটি নতুন অভিজ্ঞতা ভাগ করে নিতে চাই, যদি আপনি নতুন এনডিকে সংস্করণে আমার মতো একই সমস্যার মুখোমুখি হন।

আমার সংকলন ত্রুটি যেমন:

আমার পরিবেশটি অ্যান্ড্রয়েড-এনডিকে-আর 9 ডি এবং অ্যাডটি-বান্ডেল-লিনাক্স-x86_64-20140702। আমি একই jni ফোল্ডারে অ্যাপ্লিকেশন.এমকে ফাইল যুক্ত করি এবং একটি (এবং শুধুমাত্র একটি) লাইন সন্নিবেশ করি:

কিন্তু দুর্ভাগ্যক্রমে, এটি আমার সমস্যার সমাধান করে না! এটি সমাধানের জন্য আমাকে এই 3 টি লাইন Android.mk এ যুক্ত করতে হবে:

এবং আমি এখান থেকে একটি ভাল ভাগ করে নেওয়ার বিষয়টি দেখেছি যা বলে যে "'stlport_shared' পছন্দ করা হয়"। সুতরাং সম্ভবত স্ট্যাটিকের পরিবর্তে স্ট্যাম্পোর্টকে ভাগ করে নেওয়া লাইব্রেরি হিসাবে ব্যবহার করা আরও ভাল সমাধান। কেবলমাত্র Android.mk এ নিম্নলিখিত লাইনগুলি যুক্ত করুন এবং তারপরে অ্যাপ্লিকেশন.এমকে ফাইল যুক্ত করার দরকার নেই।

আশা করি এটি সহায়ক।


কেবল স্পষ্ট করে বলতে গেলে, আপনি যখন "একই জনি ফোল্ডার" বলছেন তখন আপনি অ্যান্ড্রয়েড প্রকল্পের জনি ফোল্ডারটি উল্লেখ করছেন? আমি নিশ্চিত করতে চাই যে আমার জানা উচিত এমন অন্য কোনও জায়গা নেই। পার্শ্ব দ্রষ্টব্য: সেই ভাল ভাগ করে নেওয়া লিঙ্কটি এখন মারা গেছে :(
হান্টার-অরিওননোয়ার

4

আমাকে সেবাস্তিয়ান রথের উত্তরে কিছুটা যুক্ত করা যাক

আপনার প্রকল্পটি ndk-buildসেবাস্তিয়ান পোস্ট করেছে কোডটি যুক্ত করার পরে কমান্ড লাইনে ব্যবহার করে সংকলন করা যেতে পারে । তবে আমার হিসাবে, Eclipse এ সিনট্যাক্স ত্রুটি ছিল এবং আমার কোড সমাপ্তি নেই।

নোট করুন যে আপনার প্রকল্পটি অবশ্যই সি / সি ++ প্রকল্পে রূপান্তরিত হবে।

কীভাবে সি / সি ++ প্রকল্প রূপান্তর করবেন

এই সমস্যা আপনার প্রকল্পের উপর ডান ক্লিক করুন ঠিক করতে, ক্লিক প্রোপার্টি

চয়ন করুন সি / সি ++ সাধারণ > - পথগুলি, এবং প্রতীক অন্তর্ভুক্ত ${ANDROID_NDK}/sources/cxx-stl/stlport/stlportকরার ডিরেক্টরি অন্তর্ভুক্ত করুন

ডায়ালগটি প্রদর্শিত হলে হ্যাঁ ক্লিক করুন ।

সংলাপ

আগে

আগে

পরে

পরে

আপডেট # 1

GNU সি ডিরেক্টরি যুক্ত করুন, পুনর্নির্মাণ। সি উত্স ফাইলগুলিতে কোনও ত্রুটি থাকবে না
GNU C ++। ডিরেক্টরি যুক্ত করুন, পুনর্নির্মাণ। সিপিপি উত্স ফাইলগুলিতে কোনও ত্রুটি থাকবে না ।


3

আপনি যদি ndk r10c বা তার পরে ব্যবহার করে থাকেন তবে কেবল অ্যাপ্লিকেশন.এমকে অ্যাপ্লিকেশন-এমপিএপিএল = সি ++ _ স্ট্যাটিক যুক্ত করুন


1

এটিই আমার ক্ষেত্রে সমস্যার সৃষ্টি করে ( CMakeLists.txt):

এটি পূর্ববর্তী সমস্ত সংজ্ঞায়িত ডিরেক্টরি অন্তর্ভুক্ত করে অদৃশ্য করে তোলে। এই লাইনটি সরিয়ে / রিফ্যাক্টর করার পরে সবকিছু ঠিকঠাক কাজ করে।


0

অ্যান্ড্রয়েড এনডিকে অ্যান্ড্রয়েড-এনডিকে-আর 9 বি> / সোর্স / সিএক্সএক্স-স্টিল / গনু-লিবস্টডিসি ++ / 4.X / এ লিনাক্স মেশিনে অন্তর্ভুক্ত করুন

আমি নীচের লিঙ্কটি থেকে সমাধান খুঁজে পেয়েছি http://osdir.com/ml/android-ndk/2011-09/msg00336.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.