সফ্টওয়্যার বিকাশকারী লিনাক্স থেকে ওএস এক্সে স্যুইচ করছেন, গটচগুলি কী কী?


50

আমি উবুন্টু / ফেডোরা / রেড হ্যাট / সুস ব্যবহার করেছি তবে ওএস এক্স ব্যবহার করিনি। যদি আমাকে নিয়মিত ওএস এক্স ব্যবহার শুরু করতে হয় তবে আমার কী কী জিনিসগুলি সন্ধান করা উচিত?

আমি যে সরঞ্জামগুলি ব্যবহার করি তা হ'ল জিএনইউ সরঞ্জাম চেইন, সি ++ / বুস্ট ইত্যাদি etc.


আপনি কি আরও প্রচলিত ইউনিক্স / লিনাক্স অ্যাপ্লিকেশন বা ম্যাক ওএসএক্স অ্যাপ্লিকেশন বিকাশ করতে যাচ্ছেন?
ডেভিড থর্নলি

1
কমপক্ষে আরও প্রথমে প্রচলিত ইউনিক্স / লিনাক্স অ্যাপ্লিকেশনগুলি, আমি কেবল ওয়ার্কস্টেশন হিসাবে ওএস এক্স পিসি ব্যবহার করি।
গ্রুকাস

উত্তর:


52

আমি বছর কয়েক আগে একই পদক্ষেপ ছিল। আমি যে জিনিসগুলিতে প্রবেশ করেছি তা এখানে:

  • আপনার গড় ডেস্কটপ লিনাক্সের ওএস এক্স-এর চেয়ে বেশি সমৃদ্ধ ইউজারল্যান্ড রয়েছে

    আমার চেয়ে আপনি সম্ভবত বিভিন্ন সরঞ্জাম মিস করবেন, সুতরাং প্রতিস্থাপনের জন্য সুপারিশগুলি সম্পর্কে সুনির্দিষ্ট হওয়ার কোনও ধারণা নেই।

    পরিবর্তে, কেবল ফিঙ্ক , ম্যাকপোর্টস বা হোমব্রিউ প্রথম জিনিস ইনস্টল করুন । এই সিস্টেমগুলি লিনাক্স বা বিএসডিগুলির মতো একটি প্যাকেজ পরিচালনা সিস্টেম সরবরাহ করে। প্রত্যেকের নিজস্ব স্বাদ এবং প্যাকেজ সেট রয়েছে, তাই সঠিক পছন্দটি আপনার স্বাদ এবং প্রয়োজনের ভিত্তিতে হবে।

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

  • ওএস এক্স কমান্ড লাইন সংকলকরা এখন ডিফল্টরূপে 64-বিট এক্সিকিউটেবল তৈরি করে।

    চিতাবাঘ এবং এর আগে, সংকলকগুলি তার পরিবর্তে ডিফল্ট হিসাবে 32-বিট এক্সিকিউটেবল তৈরি করে। এটি বিভিন্ন উপায়ে সমস্যার সৃষ্টি করতে পারে: সম্ভবত আপনার কাছে পুরাতন 32-বিট লাইব্রেরি রয়েছে যা আপনি পুনর্নির্মাণ করতে পারবেন না তবে এর সাথে লিঙ্ক করতে হবে, সম্ভবত আপনি এখনও 32-বিট মোডে আপনার সিস্টেম চালাচ্ছেন, ইত্যাদি etc.

    32-বিট বিল্ডকে জোর করার একটি উপায় হ'ল gccবিল্ড সিস্টেমে ডিফল্টগুলি ওভাররাইড করা gcc-4.0, এটি হ'ল পুরাতন 32-বিট-বাই-ডিফল্ট চিতাবাঘ সংকলক। ( স্নো চিতাবাঘের gccthe৪-বিট-বি-ডিফল্টের একটি সিমিলিংক gcc-4.2)) অটোকনফ ভিত্তিক বিল্ড সিস্টেমের সাথে এটি কাজ করে:

    $ ./configure CC=gcc-4.0 CXX=g++-4.0
    

    ( CXXযদি প্রোগ্রামটিতে সি ++ উপাদান থাকে তবে আপনার কেবল কিছুটা প্রয়োজন need )

    আর একটি উপায় হ'ল -m32সংকলক এবং লিঙ্কারে পাস করা:

    $ ./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
    

    এটি আরও টাইপিং, তবে এটি আপনাকে আরও নতুন জিসিসি থেকে 32-বিট বিল্ডগুলি পেতে দেয়।

  • গতিশীল সংযোগটি সম্পূর্ণ আলাদা।

    আপনি যদি নিজের ldকমান্ডগুলি হাতে লিখে লেখার জন্য বাছাই করেন তবে এই অভ্যাসটি ভেঙে দেওয়ার সময় এসেছে। পরিবর্তে আপনাকে সংকলকটির মাধ্যমে প্রোগ্রামগুলি এবং লাইব্রেরিগুলির লিঙ্ক করা উচিত, বা কোনও মধ্যস্থতাকারী ব্যবহার করা উচিত libtool। এগুলি নিগলি প্ল্যাটফর্ম-নির্দিষ্ট লিঙ্ক স্কিমের পার্থক্যগুলির যত্ন নেয়, যাতে আপনি পোর্টেবল পদ্ধতিতে বিমূর্ত করতে পারবেন না এমন প্রোগ্রামগুলি শেখার জন্য মস্তিষ্কের শক্তি সঞ্চয় করতে পারেন।

    উদাহরণস্বরূপ, আপনাকে নিজের পেশী মেমরি আপডেট করতে হবে যাতে লাইব্রেরিগুলির সাথে কী যুক্ত হয় তা নির্ধারণের otool -L someprogramপরিবর্তে আপনি টাইপ করুন ।ldd someprogramsomeprogram

    গতিশীল সংযোগের আরেকটি পার্থক্য যা প্রথমে আপনার মস্তিষ্ককে মোচড় দেবে তা হ'ল ওএস এক্স-এ, একটি লাইব্রেরির জন্য ইনস্টল করার অবস্থানটি লাইব্রেরিতেই রেকর্ড করা হয় এবং লিঙ্কারের সাথে লিংক অনুলিপি কার্যকর করে able এর অর্থ হ'ল আপনি যদি এমন কোনও লাইব্রেরির সাথে লিঙ্ক করেন যা ইনস্টল হয়ে গেছে /usr/local/libতবে আপনি নির্বাহের মতো একই ডিরেক্টরিতে এটি আপনার ব্যবহারকারীদের কাছে প্রেরণ করতে চান তবে আপনার ইনস্টল প্রক্রিয়াটির অংশ হিসাবে আপনাকে এ জাতীয় কিছু বলতে হবে:

    $ cp /usr/local/lib/libfoo.dylib .
    $ install_name_tool -id @loader_path/libfoo.dylib libfoo.dylib
    $ make LDFLAGS=-L. relink
    

    এখন, উপরে তৈরির বেশিরভাগটি আপনার বিল্ড সিস্টেমের জন্য পরিবর্তিত হতে পারে, তাই কেবল একটি রেসিপি না দিয়ে উদাহরণ হিসাবে গ্রহণ করুন। এটি যা করে তা হ'ল যে লাইব্রেরির সাথে আমরা লিঙ্ক করব তার একটি ব্যক্তিগত অনুলিপি তৈরি করে, তার ভাগ করা লাইব্রেরি শনাক্তকারীকে একটি নির্ধারিত পাথ থেকে "এক্সিকিউটেবলের মতো একই ডিরেক্টরিতে" অর্থ সম্পর্কিত করে পরিবর্তিত করে, তারপরে এই পরিবর্তিত অনুলিপিটির বিরুদ্ধে এক্সিকিউটেবলের পুনর্নির্মাণকে বাধ্য করে গ্রন্থাগারের

    install_name_toolএখানে কোর কমান্ড। পরিবর্তে আপনি যদি ../libএক্সিকিউটেবলের সাথে সম্পর্কিত কোনও ডিরেক্টরিতে লাইব্রেরিটি ইনস্টল করতে চান তবে তার পরিবর্তে -idযুক্তিটি থাকা দরকার @loader_path/../lib/libfoo.dylib

    জো ডি পোল এ সম্পর্কে একটি আরও নিবন্ধ লিখেছিলেন , আরও অনেকগুলি বিশদ সহ।

  • গতিশীল লিঙ্কেজ + তৃতীয় পক্ষের প্যাকেজগুলি শুরুর দিকে মাথা ব্যথার কারণ হতে পারে।

    আপনি তৃতীয় পক্ষের প্যাকেজগুলি থেকে লাইব্রেরিগুলি ব্যবহার করার চেষ্টা শুরু করার সাথে সাথে গতিশীল লিংকেজ সংক্রান্ত সমস্যার মধ্যে তাড়াতাড়ি শুরু হতে পারে যা স্ট্যান্ডার্ড লোকেশনগুলিতে লাইব্রেরি ইনস্টল করে না। ম্যাকপোর্টস এটি করে, উদাহরণস্বরূপ /opt/local/lib, এর পরিবর্তে /usr/libবা এর চেয়ে লাইব্রেরি ইনস্টল করে /usr/local/lib। আপনি যখন এটি চালনা করেন, সমস্যার জন্য একটি ভাল সমাধান হ'ল নিম্নলিখিতটিতে লাইন যুক্ত করা আপনার .bash_profile:

    # Tell the dynamic linker (dyld) where to find MacPorts package libs
    export DYLD_LIBRARY_PATH=/opt/local/lib:$DYLD_LIBRARY_PATH
    
    # Add MacPorts header file install dirs to your gcc and g++ include paths
    export C_INCLUDE_PATH=/opt/local/include:$C_INCLUDE_PATH
    export CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATH
    
  • ওএস এক্স সিপিইউ সামঞ্জস্যতার বিষয়টি লিনাক্সের চেয়ে আলাদাভাবে পরিচালনা করে।

    একটি 64৪-বিট লিনাক্সে যেখানে আপনাকে যে কোনও কারণেই 32-বিট সমর্থন করতে হবে, আপনি দুটি কপি লাইব্রেরির মতো সমাপ্ত lib64ডিরেক্টরিতে -৪ -বিট সংস্করণ বন্ধ করে উভয় ফর্ম্যাটে থাকা দরকার with traditionalতিহ্যবাহী libডিরেক্টরি।

    ওএস এক্স ইউনিভার্সাল বাইনারি ধারণার সাহায্যে এই সমস্যাটিকে অন্যভাবে সমাধান করে, যা আপনাকে একক ফাইলে একাধিক বাইনারি রাখতে দেয়। আপনার কাছে বর্তমানে এক্সিকিউটেবল থাকতে পারে যা 4 টি সিপিইউ টাইপ পর্যন্ত সমর্থন করে: 32- এবং 64-বিট পাওয়ারপিসি, প্লাস 32- এবং 64-বিট ইন্টেল।

    এক্সকোড দিয়ে ইউনিভার্সাল বাইনারিগুলি তৈরি করা সহজ তবে কমান্ড লাইন সরঞ্জামগুলির সাহায্যে কিছুটা ব্যথা। এটি আপনাকে অটোকনফ-ভিত্তিক বিল্ড সিস্টেমগুলির সাথে একটি ইউনিভার্সাল ইন্টেল-কেবল বিল্ড দেয়:

    $ ./configure --disable-dependency-tracking CFLAGS='-arch i386 -arch x86_64' \
      LDFLAGS='-arch i386 -arch x86_64'
    

    যোগ -arch ppc -arch ppc64করুন CFLAGSএবং LDFLAGSআপনার পাওয়ারপিসি সমর্থন প্রয়োজন হলে।

    যদি আপনি নির্ভরতা ট্র্যাকিং অক্ষম না করেন তবে আপনি কেবলমাত্র একটি প্ল্যাটফর্মের জন্য বিল্ডিং শেষ করবেন, যেহেতু .oপ্রথম প্ল্যাটফর্মের জন্য সদ্য নির্মিত ফাইলগুলির উপস্থিতি make(1)এটি নিশ্চিত করে যে এটি দ্বিতীয় প্ল্যাটফর্মের জন্যও তৈরি করার দরকার নেই। উপরের উদাহরণে সবকিছুই দু'বার তৈরি করতে হবে; পুরোপুরি-ইউনিভার্সাল বাইনারিগুলির জন্য চারবার, যদি আপনার এখনও পাওয়ারপিসি সমর্থন প্রয়োজন।

    ( অ্যাপল টেকনিক্যাল নোট টিএন 2137 এ আরও তথ্য ।)

  • বিকাশকারী সরঞ্জামগুলি ডিফল্টরূপে ওএস এক্সে ইনস্টল করা হয় না।

    সিংহের আগে, আপনার সিস্টেমের জন্য সঠিক দেব সরঞ্জাম পাওয়ার সবচেয়ে নির্ভরযোগ্য জায়গাটি ওএস ডিস্কে ছিল। এগুলি একটি alচ্ছিক ইনস্টল।

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

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

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


2
+1: বিশেষত গতিশীল সংযোগ উল্লেখ করার জন্য। আমি খুব অনুরূপ হবে ভেবে ধরা পড়েছিলাম। dyldইনস্টল_নামের আনন্দ এবং কীভাবে ওএসএক্স ডায়নামিক লিঙ্ক সম্পাদক, অবক্ষয়গুলি সমাধান করে!
ট্রাব্বাদৌর

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

বিকাশকারী সরঞ্জামগুলির পুরানো সংস্করণগুলির জন্য কানেক্ট.অ্যাপল ডট কম দেখুন । আমি সন্ধান করেছি এবং বিকাশকারী সরঞ্জাম বিভাগে তালিকাভুক্ত প্রথম ডাউনলোডটি OS X 10.3+ এর জন্য 27 অক্টোবর 2004 থেকে Xcode 1.0 1.0 প্রজেক্ট বিল্ডার নয়, তবে ম্যাক প্রকল্পগুলির জন্য এসওপি হ'ল কেবল বর্তমান এবং পূর্ববর্তী বড় রিলিজগুলিকে সমর্থন করা, সুতরাং 10.3+ যথেষ্টের চেয়ে বেশি।
জেরেমি ডব্লিউ শেরম্যান

@ জেরেমি: আপডেট হয়েছে। আমি লোকদের আশ্বাস দিতে চাই না যে তারা সর্বদা ডাউনলোডযোগ্য হবে, যেহেতু তারা সবসময় অতীতে হয় নি।
ওয়ারেন ইয়ং

29

বিশাল গোটচা - ম্যাক ওএস ফাইল সিস্টেম সংবেদনশীল নয়।


9
কেবল স্পষ্ট করে বলতে গেলে এগুলি কেস-সংরক্ষণকারী এবং ডিফল্টরূপে কেস-সংবেদনশীল নয়। সুতরাং আপনার ফাইলনামের কেস সংরক্ষণ করা হবে তবে আপনি যে কোনও ক্ষেত্রে তার প্রকারের মাধ্যমে এটি অ্যাক্সেস করতে পারবেন। ফাইল সিস্টেমটি তৈরি হওয়ার পরে এটি কেস-সংবেদনশীল হিসাবে পরিবর্তন করা যেতে পারে।
কিথবি

9
@ কিথবি: তবে, অনেকগুলি মূলধারার ম্যাক অ্যাপ্লিকেশন কেস-সংবেদনশীল ফাইল সিস্টেমে চলবে না, যেমন অ্যাডোব সিএস এমনকি ইনস্টল করতে অস্বীকার করেছে এবং ওয়ার্ল্ড অফ ওয়ারক্রাফ্ট চলবে না। আমি এতে জ্বলে উঠলাম এবং পুনরুদ্ধারের একমাত্র উপায় ছিল আমার সিস্টেমটিকে পুনরায় ফর্ম্যাট করা ডিস্কে ব্যাকআপ করা এবং পুনরুদ্ধার করা।
নিল মেহেজ

1
সংস্করণ নিয়ন্ত্রণের সাথে কাজ করার সময় এবং একটি মাল্টিপ্লাটফর্ম দলে কোনও প্রকল্পে কাজ করার সময় এটি বেশিরভাগই একটি গোচা।
আরাফ্যাজিওন

আমি এটিকে কাজে লাগাতে কেস-সংবেদনশীল স্পার্সবান্ডেল তৈরি করেছি। ধন্যবাদ, এই এসএসডিটিতে আমার অব্যবহৃত পার্টিশন রয়েছে।
dhchdd

9

যদিও ফিংক এবং ম্যাকপোর্টস ওএস এক্সে ইউনিক্স প্যাকেজ পাওয়ার প্রচলিত মাধ্যম, তবে আমি একটি নতুন সরঞ্জাম যা আপনার brewজন্য আরও ভাল কাজ করেছে এবং আমার সিস্টেমের সাথে কম গণ্ডগোল করেছে এবং এটি ব্যবহার করা সহজ called এটি মূলত কেবল টার্বলগুলি ডাউনলোড করে এবং / ইউএসআর / স্থানীয় ইনস্টল করে তবে এটি পুরো প্রক্রিয়াটি খুব সুন্দরভাবে স্বয়ংক্রিয়ভাবে সক্রিয় করে।

http://mxcl.github.com/homebrew/


1
একমত; হোমব্রু ম্যাকপোর্টসের চেয়ে আমার জন্য অনেক বেশি মসৃণ কাজ করছে।
জোনিক

4

বিশাল গোটচা - ম্যাক ওএস ফাইল সিস্টেম সংবেদনশীল নয়।

আপনি ম্যাক ওএস এক্সে একটি কেস সংবেদনশীল ডিস্ক চিত্র তৈরি করতে পারেন যা সাধারণ হার্ড ড্রাইভের ভলিউম হিসাবে মাউন্ট করা যায়।

# cf. http://codesnippets.joyent.com/posts/show/8617
IMAGE="${HOME}/Desktop/Case Sensitive Test.dmg"
VOLNAME="Case Sensitive Test"

hdiutil create "${IMAGE}" -size 10m -fs HFSX -volname "${VOLNAME}" -layout NONE

hdiutil attach "${IMAGE}"

cd "/Volumes/${VOLNAME}"
touch foo.txt Foo.txt
open .
ls -l [Ff]oo.txt
stat -f "inode: %i  --  name: %N" [Ff]oo.txt

cd ~
hdiutil detach "/Volumes/${VOLNAME}"

3

এখানে নির্বাচিত দেব নিবন্ধগুলির একটি ভাল উত্স, কোকো সাহিত্যের তালিকা:

http://osx.hyperjeff.net/Reference/CocoaArticles

(যদি আপনি একদিন ম্যাক ওএস এক্স নির্দিষ্ট জিনিস ব্যবহার করতে চান তবে এটি বিশেষভাবে কার্যকর হতে পারে))


3

সোলারিস, বিএসডি, লিনাক্স এবং উইন্ডোজ থেকে ওএসএক্স-তে কোনও নেটওয়ার্ক স্ট্যাক পোর্ট করার সময় মনোযোগ জোগায় এমন একমাত্র মূল বিষয় হ'ল ফ্রিবিএসডি-র মতো পুরো সরঞ্জাম চেইনটি বেশ পুরানো।

অ্যাপল ওএসএক্স সিংহের সাথে দ্রুত গতিতে চলেছে তবে চিতাবাঘ, স্নো চিতাবাঘ আধুনিক লিনাক্স বিতরণের পিছনে রয়েছে এবং অনেকগুলি মান সমর্থন করে না। আমার ক্ষেত্রে আমি আরএফসি 3678 (মাল্টিকাস্ট উত্স ফিল্টারগুলির জন্য সকেট ইন্টারফেস এক্সটেনশনগুলি) বেশ অসুবিধে না হওয়ার কারণে আক্রান্ত।

ওএসএক্স সার্ভারে আমি কেটি-সংবেদনশীল ফাইল সিস্টেম ইনস্টল করেছি যেমন এটি HTTP পরিবেশনার জন্য এটি করার পরামর্শ দেয়।

  • ওল্ড জিসিসি
  • ওল্ড অটোকনফ, অটোমাকে, লিবিটোল
  • কোনও পাইথ্রেড স্পিনলকস নেই, ওএসএক্স স্থানীয় বিকল্প সরবরাহ করে।
  • অনেকগুলি রি-ভাড়াটে এনএসএস এপিআই নয়।
  • অত্যধিক দরকারী /procফাইল সিস্টেম নয়।
  • না /dev/rtc, /dev/hpetএবং RDTSCঝাঁপিয়ে পড়েছে বলে মনে হচ্ছে। ওএসএক্স স্থানীয় বিকল্প সরবরাহ করে।
  • কোন epoll, কিন্তু আপনি আছে pollএবং kqueue

1

ওএস এক্স সমর্থন করে pthread_cond_timedwaitতবে এটি নিখুঁত ক্যালেন্ডার সময় ব্যবহার করে এবং মনোোটোনিকভাবে ক্রমবর্ধমান সময় ব্যবহার করার কোনও উপায় নেই।

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