জিসিসি / সিমেক সহ একটি 64-বিট লিনাক্স মেশিনে 32-বিট বাইনারি কীভাবে সংকলন করবেন


129

এটি একটি প্রকল্পের কম্পাইল করা সম্ভব 32-বিট সঙ্গে cmakeএবং gccএকটি উপর 64-বিট সিস্টেম? এটি সম্ভবত, তবে আমি কীভাবে এটি করব?

যখন আমি এটি "অজ্ঞ" উপায়ে চেষ্টা করেছি, কোনও পরামিতি / পতাকা / ইত্যাদি স্থাপন LD_LIBRARY_PATHনা করে , কেবল লিঙ্কযুক্ত লাইব্রেরিগুলিতে ~/tools/libএটির সন্ধান করার জন্য এটি সেটাকে উপেক্ষা করে কেবল lib64 নামের সাব-ডিরেক্টরিতে সন্ধান করা হবে বলে মনে হয় ।


1
এটি জিগিসি -m32 ফ্ল্যাগটি পাস করার পক্ষে যথেষ্ট হবে? তাহলে আমি চ্যামকে কীভাবে করব?
ডালা

উত্তর:


124
export CFLAGS=-m32

2
এটা করা উচিত। আপনি একটি 32 বিট লক্ষ্য তৈরি করতে cmake স্ক্রিপ্ট পরিবর্তন করতে পারেন - এটি কেবল যোগ -m32করে CFLAGS, সম্ভবত সেট করে CMAKE_REQUIRED_FLAGS
ক্যাফে

5
ঠিক আছে, সমস্যাটি হ'ল এটি অবশ্যই যথেষ্ট পর্যাপ্ত নয়। আপনারও লিঙ্কারটি টুইঙ্ক করার দরকার হতে পারে!
lpapp

6
কী exportমানে? এটা কোথায়? ফাইল হেডার? makefile? নাহ, একজন শিক্ষানবিস হিসাবে আমার পক্ষে সম্পূর্ণ উত্তর নেই answer
টোমা জাটো - মনিকা পুনরায় ইনস্টল করুন

1
@ টোমাজাটো: শেল প্রম্পটে, প্রার্থনা করার আগে cmake(তবে আপনার ক্ষেত্রে যদি আপনার কোনও মেকফাইল থাকে তবে আপনি makeপরিবর্তে এটি ব্যবহার করবেন )।
ক্যাফে

4
@ ক্যাফ, আপনি দয়া করে আপনার উত্তর বিস্তারিতভাবে বলতে পারেন? আপনার উত্তর খুব সংক্ষিপ্ত এবং কিছুই ব্যাখ্যা দেয় না।
বুলাত এম।

76
cc জিসিসি টেস্ট.ও-টেস্টি
ফাইল টেস্টক
টেস্টি: জিএনইউ / লিনাক্স ২.6.৯ এর জন্য এলএলএফ 64৪-বিট এলএসবি এক্সিকিউটেবল, এক্স ৮86-, version, সংস্করণ ১ (এসওয়াইএসভি), গতিশীলভাবে সংযুক্ত (শেয়ারড লিব ব্যবহার করে), ছিটানো হয়নি
d এলডিডি টেস্টি 
    linux-vdso.so.1 => (0x00007fff227ff000)
    libc.so.6 => /lib64/libc.so.6 (0x000000391f000000)
    /lib64/ld-linux-x86-64.so.2 (0x000000391ec00000)
$ gcc -m32 test.c -o testc
ফাইল টেস্টক
টেস্টি: জিএনইউ / লিনাক্স ২.6.৯ এর জন্য, এলএলপি 32-বিট এলএসবি এক্সিকিউটেবল, ইন্টেল 80386, সংস্করণ 1 (এসওয়াইএসভি), গতিশীলভাবে সংযুক্ত (শেয়ারড লিবস ব্যবহার করে), ছিটানো হয়নি
d এলডিডি টেস্টি
    লিনাক্স-গেট.সো। ১ => (0x009aa000)
    libc.so.6 => /lib/libc.so.6 (0x00780000)
    /lib/ld-linux.so.2 (0x0075b000)

সংক্ষেপে: -m3232-বিট বাইনারি সংকলন করতে পতাকাটি ব্যবহার করুন ।

এছাড়াও, আপনার প্রয়োজনীয় সমস্ত লাইব্রেরির 32-বিট সংস্করণ ইনস্টল করা আছে কিনা তা নিশ্চিত করুন (আমার ক্ষেত্রে ফেডোরায় আমার যা দরকার ছিল তা ছিল glibc-devel.i386)


1
দুর্দান্ত ধন্যবাদ! হ্যাঁ, আমার কাছে নির্ভরতার 32-বিট সংস্করণ রয়েছে।
ডালা

6
আমি কীভাবে লাইব্রেরির 32 বিট সংস্করণ ইনস্টল করতে পারি?
টোমা জাটো - মনিকা

2
@ টম্যাজাটোsudo apt-get install gcc-multilib
ম্যাথিউ মুরডোক

16

সিএমকের পরবর্তী সংস্করণগুলিতে, প্রতিটি টার্গেটে এটি করার একটি উপায় হ'ল:

set_target_properties(MyTarget PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")

আমি বিশ্বব্যাপী এটি করার কোন উপায় জানি না।


+1 টি। আমি একটি 64৪ -বিট তুষার চিতাবাঘে 32-বিট ট্যাগলিব ( বিকাশকারী.কডি.আর.ইউইউইলার / টাগলিব এইচটিএমএল ) তৈরি করার চেষ্টা করছি । এটি আমার পক্ষে কাজ করে।
এডওয়ার্ডউ

3
… এটি বিশ্বব্যাপী করতে:cmake -D CMAKE_CXX_FLAGS=-m32 . && make
ডায়মাস

7

সি ++ এর জন্য, আপনি এটি করতে পারেন:

export CXXFLAGS=-m32

এটি cmake সঙ্গে কাজ করে।


6

একটি উপায় হ'ল ক্রুট পরিবেশ স্থাপন করা। ডেবিয়ানের কাছে এর জন্য বেশ কয়েকটি সরঞ্জাম রয়েছে, উদাহরণস্বরূপ ডেবিউটস্ট্র্যাপ


2
কেবল 32-বিট অ্যাপ্লিকেশন তৈরি করতে একটি ক্রুট পরিবেশ সেটআপ করতে কিছুটা চরম মনে হয়, তাই না? কোনও বিশেষ কারণ আপনি কেন এটি সুপারিশ করেন?
ফ্রেডরিক

3
এটি আপনাকে একটি সম্পূর্ণ পরিবেশ দেয় যাতে কোড চালানোও যায়। আমরা 64৪ বিট হোস্টে পূর্ণ 32 বিট বাইনারি তৈরি করতে (এবং চালাতে) এটি ব্যবহার করি - কখনও কখনও আপনি কেবল তৃতীয় পক্ষের লাইব্রেরির 32 বিট বিল্ড পান। ডেবিয়ান কাজের জন্য, আমরা এটি 64 বিট হোস্টগুলিতে 32 বিট প্যাকেজ তৈরি করতে ব্যবহার করি।
ডার্ক এডেলবুয়েটেল

লিনাক্স, সোলারিস বা অন্য কোনও 64৪-বিট প্ল্যাটফর্মের উপর পূর্ণ 32-বিট বাইনারি তৈরি এবং চলমান কোন সমস্যা আমি কখনও পাইনি। তবে আমি ডেবিয়ানকে বেশি ব্যবহার করছি না।
ফ্রেডরিক

ফ্রেডেরিক, আপনি কি এগুলি 32 বিটের মধ্যে 64 বিট বিল্ড হোস্টে স্থাপন করেন?
ডার্ক এডেলবুয়েটেল

@ ডার্ক: 32 বিট বাইনারিগুলি 32 এবং 64 বিট উভয় মেশিনেই কাজ করে (অবশ্যই), bit৪ বিট বাইনারি কেবল bit৪ বিট মেশিনে কাজ করে। এটি কোনও গ্রাহক মেশিন বা বিল্ড হোস্ট কিনা তা বিবেচ্য নয়। আপনি যে কার্নেল মডিউলগুলি তৈরি করছেন তা না হলে সমস্যাটি কোথায় হবে তা আমি সত্যই দেখছি না।
ফ্রেডরিক

6

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

উদাহরণস্বরূপ, একটি উবুন্টু ট্রাস্টি সিস্টেমে lxc ব্যবহার করে 32-বিট ওয়াইন তৈরি করার একটি উপায় এখানে রয়েছে:

sudo apt-get install lxc lxc-templates
sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i386 --release trusty
sudo lxc-start -n my32bitbox
# login as yourself
sudo sh -c "sed s/deb/deb-src/ /etc/apt/sources.list >> /etc/apt/sources.list"
sudo apt-get install devscripts
sudo apt-get build-dep wine1.7
apt-get source wine1.7
cd wine1.7-*
debuild -eDEB_BUILD_OPTIONS="parallel=8" -i -us -uc -b
shutdown -h now   # to exit the container

Lxc ব্যবহার করে 64৪-বিট হোস্টে কীভাবে 32-বিট ওয়াইন তৈরি করবেন সে সম্পর্কে উইকি পৃষ্ঠাটি এখানে রয়েছে ।


মজাদার. আমি কি এটি atom32 বিটের মেশিনে 32 বিটের জন্য পাঠ্য সম্পাদককে সংকলন করতে ব্যবহার করতে পারি ?
আনোয়ার

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