এটি একটি রানটাইম ত্রুটি যা দ্বারা সৃষ্ট Dynamic Linker
dyld: Library not loaded: @rpath/...
...
Reason: image not found
ত্রুটি Library not loaded
সঙ্গে @rpath
ইঙ্গিত করে যে Dynamic Linker
বাইনারি খুঁজে পাচ্ছি না।
গতিশীল কাঠামোটি যুক্ত হয়েছিল কিনা তা পরীক্ষা করুন General -> Embedded Binaries
@rpath
ভোক্তা (অ্যাপ্লিকেশন) এবং প্রযোজক (গতিশীল কাঠামো) এর মধ্যে সেটআপ পরীক্ষা করুন :
- গতিশীল কাঠামো:
Build Settings -> Dynamic Library Install Name
- অ্যাপ্লিকেশন:
Build Settings -> Runpath Search Paths
Build Phases -> Embed Frameworks -> Destination, Subpath
গতিশীল লিঙ্কার
Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)
যা ব্যবহার loadable bundle
( Dynamic framework
ডেরাইভেটিভ হিসাবে) ব্যবহৃত হয় যেখানে dyld
খেলায় আসে
Dynamic Library Install Name
- বাইনারি ফাইলের পথে (না ফ্রেমওয়ার্ক)। হ্যাঁ, তারা একই নামের আছে, কিন্তু MyFramework.framework
একটি হল packaged bundle
সঙ্গে MyFramework
বাইনারি ফাইল এবং সম্পদ ভিতরে।
ডিরেক্টরিতে এই পথ পূর্ণ অথবা আপেক্ষিক হতে পারে (যেমন @executable_path
, @loader_path
, @rpath
)। আপেক্ষিক পথটি আরও বেশি পছন্দনীয় কারণ এটি একটি নোঙ্গরের সাথে একসাথে পরিবর্তিত হয়েছিল যা যখন আপনি আপনার বান্ডেলটিকে একক ডিরেক্টরি হিসাবে বিতরণ করেন তখন কার্যকর হয়
পরম পাথ - ফ্রেমওয়ার্ক 1 উদাহরণ
//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1
@executable_path
@ ক্ষরণযোগ্য_পথ - এন্ট্রি বাইনারি সম্পর্কিত - ফ্রেমওয়ার্ক 2 উদাহরণ
ব্যবহারের ক্ষেত্রে: Dynamic framework
একটি অ্যাপ্লিকেশনটিতে এম্বেড করুন
//Application bundle(`.app` package) absolute path
/some_path/Application.аpp
//Application binary absolute path
/some_path/Application.аpp/subfolder1
//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1
//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1
//Framework2 Dynamic Library Install Name
@executable_path/../Frameworks/Framework2.framework/subfolder1
//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1
@loader_path
@ লোডার_পাথ - এই বাইনারি
ব্যবহারের মামলার মালিক বান্ডিলের সাথে সম্পর্কিত: এম্বেডড ফ্রেমওয়ার্ক সহ ফ্রেমওয়ার্ক - ফ্রেমওয়ার্ক 3 এর ভিতরে ফ্রেমওয়ার্ক 3_1
//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1
//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1
//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1
//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1
//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1
//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1
//Framework3_2 Dynamic Library Install Name
@loader_path/../Frameworks/Framework3_2.framework/subfolder1
//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1
@rpath - রানপথ অনুসন্ধানের পথ
ফ্রেমওয়ার্ক 2 উদাহরণ
পূর্বে ডিল্ডের সাথে কাজ করার জন্য আমাদের একটি ফ্রেমওয়ার্ক সেটআপ করতে হয়েছিল। এটি সুবিধাজনক নয় কারণ একই ফ্রেমওয়ার্কটি অন্য কোনও কনফিগারেশনের সাথে ব্যবহার করা যায় না
@rpath
বাইরের (অ্যাপ্লিকেশন) এবং নেস্টেড (ডায়নামিক ফ্রেমওয়ার্ক) অংশগুলির উপর নির্ভর করে এমন একটি যৌগিক ধারণা:
অ্যাপ্লিকেশন:
গতিশীল ফ্রেমওয়ার্ক:
//Application Runpath Search Paths
@executable_path/../Frameworks
//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1
//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1
* ../
- বর্তমান ডিরেক্টরিটির পিতামাতার কাছে যান
otool
- অবজেক্ট ফাইল প্রদর্শনের সরঞ্জাম
//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2
//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2
//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2
LC_RPATH
@executable_path/../Frameworks
//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2
install_name_tool
গতিশীল ভাগ করে নেওয়া লাইব্রেরি ইনস্টল নাম ব্যবহার করে পরিবর্তন করুন -rpath
CocoaPods
নিয়ন্ত্রণ করতে use_frameworks!
[সম্পর্কে] ব্যবহার করে aDynamic Linker
[শব্দভাণ্ডার]
Link Binary with Libraries
আনে এবং এগুলিতে ফেলে দেওয়া যায় এবং কোনওভাবে এক্সকোড সেগুলি আপনার অ্যাপ্লিকেশন বান্ডেলে অনুলিপি করতে জানে, অন্যদিকে কাস্টম ফ্রেমওয়ার্কগুলির জন্য এটি সাধারণত ঘটে না।