আমি ম্যাক ওএস এক্সে কোথায় ডিওয়াইএলডি_লিবারি_প্যাথ সেট করব এবং এটি কী ভাল ধারণা?


28

আমি এক্সকোডে লিখেছি কোডটি ব্যবহারের জন্য, আমি আমার ম্যাক (ওএস এক্স) তে সি ++ তে লেখা একটি সলভার ইনস্টল করার চেষ্টা করছি।

সলভার ডকুমেন্টেশন এটি বলে:

অবশ্যই আছে "।" আপনার DYLD_LIBRARY_PATHক্রমে

  • প্রস্তুত নির্মিত এক্সিকিউটেবলগুলি চালান
  • libamg.dylib এর সাথে লিঙ্ক করুন (এবং গফর্টান আরটিএসলিব)

আমি এর অর্থ আসলে বুঝতে পারি না। আমার কোথায় এবং কী পরিবর্তন করতে হবে?

আমি কিছু গুগলিং করেছি, তবে আমার মতো নবাগত সন্তানের পক্ষে যথেষ্ট সহজ কিছু এমন কিছু পাইনি! যদি এমন কোনও রোগী লোক থাকেন যাঁরা আমাকে কোনও অনলাইন উত্সের দিকে পরিচালিত করতে বা পরিবেশের পরিবর্তনশীলগুলি কীভাবে এবং কোথায় সেট করতে চান তার ab-cs দেওয়ার বিষয়ে আপত্তি জানায় না, আমি খুব কৃতজ্ঞ হব।

উত্তর:


20

এটি একটি পরিবেশের পরিবর্তনশীল এবং যেমন সাধারণত টার্মিনালে সেট করে

export DYLD_LIBRARY_PATH=someValue

man dyld বলেছেন:

DYLD_LIBRARY_PATH

এটি লাইব্রেরি সহ ডিরেক্টরিগুলির একটি কোলন বিচ্ছিন্ন তালিকা। গতিশীল লিঙ্কার লাইব্রেরির জন্য ডিফল্ট অবস্থানগুলি অনুসন্ধান করার আগে এই ডিরেক্টরিগুলি অনুসন্ধান করে। এটি আপনাকে বিদ্যমান লাইব্রেরির নতুন সংস্করণ পরীক্ষা করার অনুমতি দেয়।

একটি প্রোগ্রাম ব্যবহার করে এমন প্রতিটি লাইব্রেরির জন্য ডায়নামিক লিঙ্কার প্রতিটি ডিরেক্টরিতে এটি DYLD_LIBRARY_PATHঘুরে দেখায় । যদি এটি এখনও গ্রন্থাগারটি খুঁজে না পায় তবে এটি অনুসন্ধান করে DYLD_FALLBACK_FRAMEWORK_PATHএবং DYLD_FALLBACK_LIBRARY_PATHঘুরে ফিরে।

-Lবিকল্পটি ব্যবহার করুন otool(1)। এক্সিকিউটেবলের সাথে লিঙ্কযুক্ত ফ্রেমওয়ার্ক এবং ভাগ করা লাইব্রেরিগুলি আবিষ্কার করতে to


আপনি সম্ভবত কিছু চাই

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

.অনুসন্ধান করা অবস্থানের তালিকায় প্রিপেন্ড (বর্তমান ডিরেক্টরি) করতে। আমার অশোধিত ওএস এক্সে, DYLD_LIBRARY_PATHএর বর্তমান মান নেই যদিও:

$ echo $DYLD_LIBRARY_PATH

$

আপনি কীভাবে আপনার প্রোগ্রামটি চালাতে চান তার উপর নির্ভর করে আপনাকে এটি আলাদাভাবে সেট করতে হবে, যেমন এক্সকোডে (যদিও আমি জানি না)।


1
আমি @ টিভিএনশ্যাকের সাথে একমত হয়েছি যে আপনার সাধারণত সেট করা উচিত নয়DYLD_LIBRARY_PATH বা করা উচিত নয় DYLD_FRAMEWORK_PATH, কারণ এটি সিস্টেম-সরবরাহিত লাইবসগুলি খুঁজে পেতে এই লোডড লিবগুলি বাধা দিতে পারে। সেই কাজটি আরও ভাল করতে, পরিবর্তে FALLBACKসংস্করণগুলি ব্যবহার করুন । এই উত্তরটি আরো তথ্য: stackoverflow.com/a/3172515/43615
SuperTempel

21

কখনও export DYLD_LIBRARY_PATHআপনার সিস্টেমে সেট করা উচিত নয় ।

ভাগ করা গ্রন্থাগার পাথ ব্যবহার সংশোধন করা যেতে পারে otool -Lএবং install_name_tool

উদাহরণস্বরূপ, আপনি যদি পার্ল ডিবিডি-মাইএসকিউএল সংকলন করেন তবে আপনি এটি ব্যবহার করতে পারবেন না কারণ লিঙ্কার জানেন না আপনি কোথায় মাইএসকিউএল ইনস্টল করেছেন।

># make
....


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)


#> install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib blib/arch/auto/DBD/mysql/mysql.bundle


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)



#> make test
...
Result: PASS

#> make install

এটি যে হিসাবে সহজ।


দ্রুত এফওয়াইআই: ইনস্টল_নাম_তুল নীরবে ব্যর্থ হয় যদি নতুন পাথটি প্রতিস্থাপনের পথের চেয়ে দীর্ঘ হয়। 'ওটুল-এল' দিয়ে সর্বদা যাচাই করুন যে প্রত্যাশা অনুযায়ী পথটি পরিবর্তিত হয়েছিল।
ব্যবহারকারী 15685

আসুন আমি বলি যে আমি একটি প্লাগ ইন (মূলত নিজেই একটি ডায়নামিক লাইব্রেরি) সংকলন করি যা অন্য ডায়নামিক লাইব্রেরির উপর নির্ভর করে। অন্যান্য ব্যবহারকারীদের জন্য আমি কীভাবে প্লাগ ইন এবং এর নির্ভরতা সরবরাহ করব?
রই

আপনি যদি পরিবর্তে সেট করেন তবেDYLD_FALLBACK_FRAMEWORK_PATH এটি এই ক্ষেত্রে কাজ করে । অভ্যন্তরীণ পাথগুলি libs এর পরিবর্তনের চেয়ে অনেক সহজ, বিশেষত যদি আপনাকে নিজের অ্যাপ্লিকেশন দিয়ে নির্মিত ডিলিবগুলি সরবরাহ করতে হয় এবং তারা যে পথে পৌঁছেছে সে সম্পর্কে ভবিষ্যদ্বাণী করতে না পারে।
টেম্পেল

7

এক্সকোড 4 এ আপনি এর মতো ত্রুটিগুলি এড়াতে প্রকল্পের স্কিমে এটি যুক্ত করতে পারেন:

dyld: Library not loaded: @loader_path/libLeap.dylib
  Referenced from: /Users/paulsolt/Library/Developer/Xcode/DerivedData/LeapTest-eqcxmzewheyjusgrcszyvlcxlgna/Build/Products/Debug/LeapTest
  Reason: image not found
  1. মেনুতে "পণ্য" -> "প্রকল্পের সম্পাদনা করুন" -> "যুক্তিগুলি" ট্যাবে ক্লিক করুন -> "পরিবেশগত পরিবর্তনসমূহ" -> কী: DYLD_LIBRARY_PATH মান: / ব্যবহারকারী / আমার ব্যবহারকারী অ্যাকাউন্ট / পাথ / থেকে / lib

  2. আপনার ব্যবহারকারীর অ্যাকাউন্টের পাথ এবং লাইব্রেরি ফোল্ডারের পুরো পথ পরিবর্তন করুন।

  3. আপনার তৈরি এবং চালাতে সক্ষম হওয়া উচিত।

এক্সকোড 4-এ ডিওয়াইএলডি_লিবিআরএইপিএটিএল সেট করা হচ্ছে

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