আমি বুঝতে পারছি না - ডাব্লুএল, -পাথ-ডাব্লু,


244

সুবিধার জন্য আমি নীচে প্রাসঙ্গিক manpages যুক্ত করেছি।

আমার (ভুল) বোঝা প্রথমে: যদি আমার সাথে বিকল্পগুলি আলাদা ,করতে হয় তবে এর অর্থ -Wlহ'ল দ্বিতীয়টি অন্য বিকল্প নয় কারণ এটির আগে আসার ,অর্থ এটি -rpathবিকল্পটির পক্ষে যুক্তি ।

বুঝতে পারি না কীভাবে যুক্তি -rpathথাকতে -Wl,.পারে!

আমার মনে কী অর্থ আসবে তা হ'ল:

-Wl,-rpath .

এটির বর্তমান ডিরেক্টরি আর্গুমেন্টের সাথে -rpath লিঙ্কার বিকল্পটি চাওয়া উচিত।


ম্যান জিসিসি:

-Wl বিকল্পটি

লিঙ্কারের বিকল্প হিসাবে পাস বিকল্প। যদি বিকল্পটিতে কমা থাকে, তবে এটি কমাগুলিতে একাধিক বিকল্পে বিভক্ত। বিকল্পটিতে একটি আর্গুমেন্ট পাস করতে আপনি এই বাক্য গঠনটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, লিঙ্কারে -Wl,-Map,output.mapপাস -Map output.map। জিএনইউ লিঙ্কার ব্যবহার করার সময়, আপনি একই প্রভাবটি `-Wl, -Map = আউটপুট.ম্যাপের সাথেও পেতে পারেন।

মানুষ এলডি:

-rpath = Dir

রানটাইম লাইব্রেরি অনুসন্ধানের পথে একটি ডিরেক্টরি যুক্ত করুন। ভাগ করা অবজেক্টের সাথে কোনও ELF এক্সিকিউটেবলের সাথে সংযোগ করার সময় এটি ব্যবহৃত হয়। সমস্ত-আরপথ আর্গুমেন্টগুলি সংক্ষিপ্ত করে রানটাইম লিঙ্কারে প্রেরণ করা হয়, যা রানটাইমে ভাগ করে নেওয়া অবজেক্টগুলি সনাক্ত করতে তাদের ব্যবহার করে। লিঙ্কের মধ্যে স্পষ্টভাবে অন্তর্ভুক্ত ভাগ করা অবজেক্টগুলির দ্বারা প্রয়োজনীয় যা ভাগ করা বস্তুগুলি চিহ্নিত করার সময় -rpath বিকল্পটিও ব্যবহৃত হয়;


2
শিরোনামটি কি বিন্দু চরিত্রটি শেষে নেই?
সেল্ডার

উত্তর:


277

-Wl,xxxজন্য বিকল্প জিসিসি আর্গুমেন্ট এর একটি স্থান পৃথক করা তালিকা হিসাবে টোকেন একটি কমা দিয়ে পৃথক করা তালিকা পাসের linker । সুতরাং

gcc -Wl,aaa,bbb,ccc

শেষ পর্যন্ত একটি লিঙ্কার কল হয়ে যায়

ld aaa bbb ccc

আপনার ক্ষেত্রে, আপনি " ld -rpath ." বলতে চান , সুতরাং আপনি একে -Wl,-rpath,.বিকল্প হিসাবে জিসিসিতে পাস করেন , আপনি এর পুনরাবৃত্তি উদাহরণগুলি নির্দিষ্ট করতে পারেন -Wl:

gcc -Wl,aaa -Wl,bbb -Wl,ccc

মনে রাখবেন যে aaaদ্বিতীয় এবং দ্বিতীয়টির মধ্যে কোনও কমা নেই -Wl

অথবা, আপনার ক্ষেত্রে -Wl,-rpath -Wl,.,।


5
ওহ আমি এখন বুঝতে পারি, লিঙ্কারের কাছে স্টাফ দেওয়ার সময় বিকল্প বা যুক্তির মধ্যে কোনও বৈষম্য নেই, এটি কেবল একটি স্ট্রিং। তাই দ্বিতীয় -আমি নিরর্থক! ধন্যবাদ :)
ব্লব

29
@ ব্লুব: এটি নিরর্থক নয়! এটি বিকল্প রূপ, আপনি হয় বলুন -Wl,-rpath,. বা আপনি বলুন -Wl,-rpath -Wl,.। দু'জনের মধ্যে অবশ্যই একটি, আপনি কিছু বাদ দিতে পারবেন না।
কেরেক এসবি

ওএস এক্সে, অর্থাৎ ঝনঝন & ld64 দিয়ে আরপিথ স্থাপনে কারও কি সাফল্য আছে?
বেন-অ্যালব্র্যাচট

আপনি একাধিক আরপ্যাথ উল্লেখ করতে চাইলে সিনট্যাক্সটি কেমন হবে? -Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib?
হিন্ট্রন

1
@ হিন্ট্রন: হ্যাঁ, বা -Wl,-rpath,dir1,-rpath,dir2, বা -Wl,-rpath=dir1,-rpath=dir2
কেরেরেক এসবি

63

আপনিও লিখতে পারতেন

-Wl,-rpath=.

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


3
থেকে gcc.gnu.org/onlinedocs/gcc/Link-Options.html#Link-Options অধীনে -Wl,option: " গনুহ linker ব্যবহার করার সময় ।, এছাড়াও আপনি -Wl, -Map = output.map সঙ্গে একই এফেক্ট পেতে পারেন" আমার কাছে এটি মনে হয় যে আপনি যদি জিএনইউ লিংকার ছাড়া অন্য কোনও লিঙ্কার ব্যবহার করেন তবে =সিনট্যাক্সটি সমর্থিত হতে পারে না।
হিন্ট্রন

39

অন্য একটি জিনিস। আপনি -L বিকল্প নির্দিষ্ট করার প্রয়োজন হতে পারে হিসাবে ভাল - যেমন

-Wl,-rpath,/path/to/foo -L/path/to/foo -lbaz

অথবা আপনি যেমন একটি ত্রুটি শেষ করতে পারেন

ld: cannot find -lbaz

10

ম্যান পেজটি এটি বেশ স্পষ্ট করে তোলে। আপনি যদি লিঙ্কারে দুটি যুক্তি ( -rpathএবং .) পাস করতে চান তবে আপনি লিখতে পারেন

-Wl,-rpath,.

বা বিকল্পভাবে

-Wl,-rpath -Wl,.

-Wl,-rpath .আপনার প্রস্তাবিত যুক্তিগুলি আমার মনের মধ্যে আসে না। আপনার দ্বিতীয় যুক্তি ( .) লিংকারে সাধারণত ব্যাখ্যা করার পরিবর্তে লিঙ্কারে পাস করার কথা বলে কীভাবে জিসিসি অনুমিত হবে ? এটি জানার একমাত্র উপায় হ'ল যদি এটির সমস্ত সম্ভাব্য লিংকার যুক্তিগুলির অন্তর্নিহিত জ্ঞান ছিল তাই এটি জানত যে -rpathএটির পরে একটি যুক্তির প্রয়োজন।


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