কোনও সোর্স কোডের উপলব্ধতা ছাড়াই ডায়নামিক এক্সিকিউটেবল থেকে স্ট্যাটিক করার কোনও ওপেন-সোর্স উপায় আছে কি?


20

আমাকে একটি উদাহরণ দিয়ে সমস্যাটি ব্যাখ্যা করুন। আমি আমার প্রতিদিনের কাজে কিছু পুরানো প্রোগ্রাম ব্যবহার করি, যেমন xfig এবং pdfedit

এখন, এই প্রোগ্রামগুলি বেশ পুরানো এবং খুব বেশি আপডেট হয় না; আমার ভয় হ'ল একদিন না অন্য কোনও গ্রন্থাগার বা কিছু বেমানান আপডেটের অভাবে তারা আর কাজ করবে না।

প্রোগ্রামটি যদি এখনই চলমান সিস্টেমে সংকলন করা সহজ হয় তবে সমাধানটি সহজ: প্রত্যাশিত ভবিষ্যত (1)। এটি এটিকে মনে হয় xfigএবং যত তাড়াতাড়ি সম্ভব এটি চেষ্টা করব।

তবে, উদাহরণস্বরূপ, pdfeditQt3 এর উপর নির্ভর করে এবং এটি সংকলনের জন্য একটি সিস্টেম স্থাপন করা এই মুহুর্তে বেশ জটিল। ভাগ্যক্রমে এটি এখনই চালানো যেতে পারে , এটি যে লাইব্রেরির জন্য প্রয়োজনীয় এটি কোনও কিছুর সাথে বিরোধ নয়। তবে এটি ভবিষ্যতে পরিবর্তন হতে পারে, তাই আমি এই সমস্যাটি সমাধান করতে চাই:

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

আমি আশেপাশে তল্লাশি করেছি। একটি সম্ভাবনা স্ট্যাটিফায়ার (2), তবে ঠিকানার র্যান্ডমাইজেশনে এটির অনেক সমস্যা রয়েছে , তাই এটি কোনও সংখ্যা নেই। অ-মুক্ত সংস্করণ, এরমিন কাজ করে বলে মনে হচ্ছে, তবে আমি সত্যিই একটি মুক্ত উত্স বিকল্পটি পছন্দ করব prefer

আরেকটি সম্ভাবনা হ'ল ডকার বা অনুরূপ প্যাকেজিং সিস্টেম ব্যবহার করা। তবে আমি যে সমস্ত টিউটোরিয়াল পেয়েছি তা বেশ রেডহ্যাটমুখী ; এবং, সত্যই, অনুসরণ করা বেশ জটিল।


পাদটীকা :

(1) এত পাগল নয়। আমি উদাহরণস্বরূপ একটি স্ট্যাটিক ffmpeg ব্যবহার করি , ঠিক আছে এবং কোনও সামঞ্জস্যতা সমস্যা ছাড়াই কাজ করে ...

(2) কম্পাইল করার statifier, দেখুন /programming/23498237/compile-program-for-32bit-on-64bit-linux-os-causes-fatal-error

উত্তর:


19

আপনি নিজের সমস্যাটিকে অন্য এবং আরও সহজ উপায়ে সমাধান করতে পারেন:

lddলিঙ্কযুক্ত লাইব্রেরিগুলি দেখতে আপনার এক্সিকিউটেবলের উপর ব্যবহার করুন, উদাহরণস্বরূপ:

$ ldd /bin/bash
linux-vdso.so.1 =>  (0x00007fffb2fd4000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fac9ef91000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fac9ed8d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fac9e9c6000)
/lib64/ld-linux-x86-64.so.2 (0x00007fac9f1e1000)

তারপরে একটি ফোল্ডারে সমস্ত লাইব্রেরি সংগ্রহ করুন এবং আপনার ফোল্ডারে এই বিষয়টিকে নির্দেশ করার জন্য LD_LIBRARY_PATH পরিবেশ পরিবর্তনশীল সেট করুন:

$ LD_LIBRARY_PATH="/opt/my_program/lib" /opt/my_program/start

বিকল্পভাবে আপনি lib ফোল্ডারে একটি এন্ট্রি যুক্ত করতে পারেন /etc/ld.so.conf.d/। তবে এটি ব্যাবস্থাপনার ব্যাবস্থাটি প্রয়োগ করবে would


এটি একটি ভাল ধারণা --- যদিও আমি সত্যিই এই সমস্তকে একটি এক্সিকিউটেবলের মধ্যে প্যাকেজের কোনও উপায় খুঁজে পেতে চাই; এই সমাধানটি লোডার পরিবর্তনের দ্বারা প্রভাবিত হতে পারে (যদিও আমি আশা করি যে কেউ অন-পশ্চাদপটে সামঞ্জস্যপূর্ণ উপায়ে এমন কাজ করবে না)। আরও ভাল সমাধান না হলে অনুগ্রহ প্রদান করবেন --- ধন্যবাদ।
রোমানো

আচ্ছা আপনি এটিকে কিছুটা ইনস্টলেশন স্ক্রিপ্টে যুক্ত করতে এবং এটি স্থানীয় পথে লিঙ্ক করতে পারেন। আমি এই সমাধানটি পছন্দ করি, এটি একবার সময় ব্যবহার করতে পারতাম।
WalyKu

1
@ ক্লাউস, linux-vdso.so.1 কোথাও দেখা যায়নি, আমি মনে করি এটি কার্নেলের মধ্যে রয়েছে, সঠিক?
রুমানো

1
হ্যাঁ. থেকে man 7 vdso: "" ভিডিএসও "(ভার্চুয়াল ডায়নামিক শেয়ার্ড অবজেক্ট) একটি ছোট্ট ভাগ করা লাইব্রেরি যা কার্নেলটি স্বয়ংক্রিয়ভাবে সমস্ত ব্যবহারকারীর স্থান অ্যাপ্লিকেশনগুলির ঠিকানা স্পেসে ম্যাপ করে" "
ক্লাউস ডি

যদিও এটি কঠোরভাবে প্রশ্নের উত্তর নয় , এটি একটি যুক্তিসঙ্গত কাজ। ধন্যবাদ।
রোমানো

2

স্ট্যাটিফায়ার সম্পর্কিত একটি পরামর্শ :

যদি ঠিকানা স্পেস লেআউট র্যান্ডমাইজেশন (এএসএলআর) এর ব্যর্থতা সৃষ্টি করে তবে আপনাকে এটি পুরো মেশিনের জন্য বন্ধ করতে হবে না। আপনি কেবল সেই প্রক্রিয়াটির জন্য এটি বন্ধ করতে পারেন:

$ setarch `uname -m` -R statified_pdfedit [args...]

এটি কমান্ডটি এলোমেলোভাবে বিন্যাসযুক্ত অক্ষম করে চালাবে (রুট হওয়ার দরকার নেই)।


বাহ, আকর্ষণীয়। এখন আমি যদি কেবল সংকলন করতে পারি statifier...
রুমানো

সংকলিত এবং পরীক্ষা করা হয়েছে। xfig_statifiedএখনও কোর ডাম্পস ... একটি করুণা যাই হোক ধন্যবাদ.
রোমানো

হ্যাঁ, একটি করুণা। আমি ভাবছি যদি এটি কোনও bit৪ বিটের সমস্যা না হয় তবে 32 বিট সেটআপে স্ট্যাটিফায়ার চালানোর চেষ্টা করুন?
লেমনসকিউজ

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