ကွန်ပျူတာတွင်၊ rpath သည် executable file သို့မဟုတ် library တွင် hard-code လုပ်ထားသော run-time search path ကို သတ်မှတ်ပေးသည်။ … Dynamic linking loaders များသည် လိုအပ်သော စာကြည့်တိုက်များကို ရှာဖွေရန် rpath ကို အသုံးပြုသည်။ အထူးသဖြင့်၊ ၎င်းသည် စီမံလုပ်ဆောင်နိုင်သော (သို့မဟုတ် အခြားမျှဝေထားသောစာကြည့်တိုက်) ၏ ခေါင်းစီးသို့ မျှဝေထားသောစာကြည့်တိုက်များသို့ လမ်းကြောင်းတစ်ခုကို ကုဒ်လုပ်သည်။
Rpath Cmake ဆိုတာဘာလဲ။
RPATH - UNIX စနစ်အများစုတွင် ပံ့ပိုးပေးနိုင်သော executable နှင့် ချိတ်ဆက်ထားသည့် လမ်းညွှန်များစာရင်း။ RUNPATH ရှိလျှင် ၎င်းကို လျစ်လျူရှုထားသည်။ LD_LIBRARY_PATH – လမ်းညွှန်များစာရင်းကို ကိုင်ဆောင်ထားသည့် ပတ်၀န်းကျင်ပြောင်းလဲနိုင်သော တစ်ခု။
Linux စာကြည့်တိုက်တွေက ဘာတွေလဲ။
Linux ရှိ စာကြည့်တိုက်တစ်ခု
လုပ်ဆောင်ချက်များသည် ပရိုဂရမ်တစ်လျှောက်လုံးတွင် ပြန်လည်အသုံးပြုရမည့် ကုဒ်တုံးများဖြစ်သည်။ ပရိုဂရမ်တစ်ခုတွင် ကုဒ်အပိုင်းအစများကို ထပ်မံအသုံးပြုခြင်းသည် အချိန်ကုန်သက်သာစေသည်။ ၎င်းသည် ပရိုဂရမ်မာအား ကုဒ်ကို အကြိမ်ကြိမ်ပြန်ရေးခြင်းမှ တားဆီးသည်။ ပရိုဂရမ်မာများအတွက်၊ စာကြည့်တိုက်များသည် ပြန်သုံးနိုင်သော လုပ်ဆောင်ချက်များ၊ ဒေတာဖွဲ့စည်းပုံများ၊ အတန်းများနှင့် အခြားအရာများကို ပေးဆောင်သည်။
Linux တွင် မျှဝေထားသော အရာဝတ္ထုဆိုသည်မှာ အဘယ်နည်း။
Shared Libraries များသည် run-time တွင် မည်သည့် program နှင့်မဆို ချိတ်ဆက်နိုင်သော စာကြည့်တိုက်များဖြစ်သည်။ ၎င်းတို့သည် မမ်မိုရီအတွင်း မည်သည့်နေရာ၌မဆို တင်နိုင်သော ကုဒ်ကို အသုံးပြုရန် နည်းလမ်းကို ပေးဆောင်သည်။ တင်ပြီးသည်နှင့်၊ မျှဝေထားသော စာကြည့်တိုက်ကုဒ်ကို မည်သည့်ပရိုဂရမ်အရေအတွက်ဖြင့်မဆို အသုံးပြုနိုင်ပါသည်။
Ld ဘယ်လိုအလုပ်လုပ်သလဲ။
ld.so သည် သင့်ပရိုဂရမ်၏ ELF ဖိုင်နှင့် လိုအပ်သော စာကြည့်တိုက်အားလုံး၏ ELF ဖိုင်များအားလုံးကို လိုအပ်သော ELF ဖိုင်များအားလုံးကို အမှန်တကယ်ဖွင့်ပြီး mmap ပြုလုပ်ပေးပါသည်။ ထို့အပြင်၊ ၎င်းသည် GOT နှင့် PLT ဇယားများကိုဖြည့်ပြီး နေရာရွှေ့ပြောင်းခြင်းများကို ဖြေရှင်းပေးသည် (၎င်းသည် နေရာအများအပြားတွင် သွယ်ဝိုက်ခေါ်ဆိုမှုများဖြင့် သွယ်ဝိုက်သောခေါ်ဆိုမှုများဖြင့် လိပ်စာများကို စာတိုက်များမှ လုပ်ဆောင်ချက်များ၏လိပ်စာများကို ရေးပေးသည်။
Target_link_libraries သည် Cmake တွင် အဘယ်အရာလုပ်ဆောင်သနည်း။
ပေးထားသောပစ်မှတ်နှင့်/သို့မဟုတ် ၎င်း၏မှီခိုသူများကို ချိတ်ဆက်သည့်အခါ အသုံးပြုရန် စာကြည့်တိုက်များ သို့မဟုတ် အလံများကို သတ်မှတ်ပါ။ ချိတ်ဆက်ထားသော စာကြည့်တိုက်ပစ်မှတ်များမှ အသုံးပြုမှုလိုအပ်ချက်များကို ဖြန့်ဝေပါမည်။ ပစ်မှတ်၏ မှီခိုမှုများ၏ အသုံးပြုမှုလိုအပ်ချက်များသည် ၎င်း၏ကိုယ်ပိုင်အရင်းအမြစ်များကို စုစည်းမှုအပေါ် သက်ရောက်မှုရှိသည်။
GCC ရှိ Rpath ဆိုတာဘာလဲ။
ကွန်ပျူတာတွင်၊ rpath သည် executable file သို့မဟုတ် library တွင် hard-code လုပ်ထားသော run-time search path ကို သတ်မှတ်ပေးသည်။ … Dynamic linking loaders များသည် လိုအပ်သော စာကြည့်တိုက်များကို ရှာဖွေရန် rpath ကို အသုံးပြုသည်။ အထူးသဖြင့်၊ ၎င်းသည် စီမံလုပ်ဆောင်နိုင်သော (သို့မဟုတ် အခြားမျှဝေထားသောစာကြည့်တိုက်) ၏ ခေါင်းစီးသို့ မျှဝေထားသောစာကြည့်တိုက်များသို့ လမ်းကြောင်းတစ်ခုကို ကုဒ်လုပ်သည်။
Linux တွင် သိမ်းဆည်းထားသော စာကြည့်တိုက်များ
မူရင်းအားဖြင့်၊ စာကြည့်တိုက်များသည် /usr/local/lib၊ /usr/local/lib64၊ /usr/lib နှင့် /usr/lib64 တွင်တည်ရှိပါသည်။ system startup libraries များသည် /lib နှင့် /lib64 တွင်ရှိသည်။ ပရိုဂရမ်မာများသည် စိတ်ကြိုက်နေရာများတွင် စာကြည့်တိုက်များကို ထည့်သွင်းနိုင်သည်။ စာကြည့်တိုက်လမ်းကြောင်းကို /etc/ld တွင် သတ်မှတ်နိုင်သည်။
Linux တွင် စာကြည့်တိုက်များကို မည်သို့ရှာရမည်နည်း။
ထိုစာကြည့်တိုက်များအတွက် /usr/lib နှင့် /usr/lib64 တွင်ကြည့်ရှုပါ။ ffmpeg များထဲမှ တစ်ခုကို ပျောက်ဆုံးနေသည်ကို တွေ့ရှိပါက၊ ၎င်းကို symlink ပြုလုပ်ခြင်းဖြင့် အခြား directory တွင် ရှိနေပါသည်။ 'libm' အတွက် ရှာဖွေနိုင်သည်။
Linux တွင် dll များ ရှိပါသလား။
Linux တွင် ၎င်းသည် မူရင်းအလုပ်လုပ်ကြောင်း ကျွန်ုပ်သိသော တစ်ခုတည်းသော DLL ဖိုင်များကို Mono ဖြင့် စုစည်းထားသည်။ အကယ်၍ တစ်စုံတစ်ဦးမှ သင့်အား ကုဒ်ဆန့်ကျင်ရန် သီးသန့် binary စာကြည့်တိုက်ကို ပေးခဲ့ပါက၊ ၎င်းကို ပစ်မှတ်ဗိသုကာအတွက် စုစည်းထားခြင်းဖြစ်သည် (x86 စနစ်တွင် am ARM binary ကိုအသုံးပြုရန်ကြိုးစားခြင်းကဲ့သို့မဟုတ်ပါ) နှင့် ၎င်းကို Linux အတွက် စုစည်းထားကြောင်း စစ်ဆေးရပါမည်။
Soname Linux ဆိုတာဘာလဲ။
Unix နှင့် Unix တူသော လည်ပတ်မှုစနစ်များတွင်၊ soname သည် မျှဝေထားသော အရာဝတ္ထုဖိုင်ရှိ ဒေတာနယ်ပယ်တစ်ခုဖြစ်သည်။ ဆိုရိုးအမည်သည် အရာဝတ္ထု၏လုပ်ဆောင်နိုင်စွမ်းကိုဖော်ပြသည့် "ယုတ္တိအမည်" အဖြစ်အသုံးပြုသည့် စာကြောင်းတစ်ခုဖြစ်သည်။ ပုံမှန်အားဖြင့်၊ ထိုအမည်သည် စာကြည့်တိုက်၏ ဖိုင်အမည်နှင့် ညီမျှသည်၊ သို့မဟုတ် ယင်း၏ရှေ့ဆက်ဖြစ်သော၊ ဥပမာ libc ဖြစ်သည်။
Ldconfig သည် Linux တွင်ဘာလုပ်ဆောင်သနည်း။
ldconfig သည် ဖိုင် /etc/ld ရှိ command line တွင် သတ်မှတ်ထားသော လမ်းကြောင်းများတွင် တွေ့ရှိသည့် လတ်တလော မျှဝေထားသော ဒစ်ဂျစ်တိုက်များသို့ လိုအပ်သော လင့်ခ်များနှင့် ကက်ရှ်များကို ဖန်တီးပေးသည်။ ဒါကြောင့်
Linux ရှိ Ld_library_path ဆိုတာ ဘာလဲ
LD_LIBRARY_PATH သည် dynamic libraries/shared libraries များကိုချိတ်ဆက်နေစဉ် linker မှကြည့်ရှုသင့်သည့်လမ်းကြောင်းကိုသတ်မှတ်ပေးသည့် Linux/Unix တွင်ကြိုတင်သတ်မှတ်ထားသောပတ်ဝန်းကျင်ပြောင်းလွဲချက်ဖြစ်သည်။ … LD_LIBRARY_PATH ကို အသုံးပြုရန် အကောင်းဆုံးနည်းလမ်းမှာ ပရိုဂရမ်ကို မလုပ်ဆောင်မီ ၎င်းကို command line သို့မဟုတ် script ပေါ်တွင် ချက်ချင်း သတ်မှတ်ရန်ဖြစ်သည်။
Linux တွင် Ld_preload ဆိုတာဘာလဲ။
LD_PRELOAD လှည့်ကွက်သည် မျှဝေထားသောစာကြည့်တိုက်များ၏ ချိတ်ဆက်မှုနှင့် runtime တွင် သင်္ကေတများ (လုပ်ဆောင်ချက်များ) ကို လွှမ်းမိုးရန် အသုံးဝင်သောနည်းပညာတစ်ခုဖြစ်သည်။ LD_PRELOAD ကိုရှင်းပြရန်၊ Linux စနစ်ရှိ စာကြည့်တိုက်များအကြောင်း အနည်းငယ် ဆွေးနွေးကြည့်ရအောင်။ … Static libraries များကို အသုံးပြု၍ သီးခြား ပရိုဂရမ်များကို ကျွန်ုပ်တို့ တည်ဆောက်နိုင်ပါသည်။
Ld_debug ဆိုတာဘာလဲ။
သတ်မှတ်ခြင်း LD_DEBUG=bindings၊detail ၊ သည် အမှန်တကယ် binding တည်နေရာများ၏ အစစ်အမှန်နှင့် ဆွေမျိုးလိပ်စာများနှင့် ပတ်သက်သော အပိုအချက်အလက်များကို ပေးပါသည်။ runtime linker သည် လုပ်ဆောင်ချက် ပြောင်းရွှေ့ခြင်းကို လုပ်ဆောင်သောအခါ၊ ၎င်းသည် လုပ်ဆောင်ချက်များနှင့် ဆက်စပ်နေသော ဒေတာကို ပြန်လည်ရေးသားသည်။
Ld_preload ဘယ်လိုအလုပ်လုပ်သလဲ။
LD_PRELOAD သည် သင့်အား မျှဝေထားသော အရာဝတ္ထုတစ်ခုတွင် သင့်လုပ်ဆောင်ချက်အသစ်ကို သတ်မှတ်ခြင်းဖြင့် မည်သည့်စာကြည့်တိုက်ရှိ သင်္ကေတများကိုမဆို အစားထိုးနိုင်စေပါသည်။ … mybinary ကို လုပ်ဆောင်သောအခါ၊ ၎င်းသည် သင်၏စိတ်ကြိုက်လုပ်ဆောင်ချက်ကို အခမဲ့ အသုံးပြုသည်။