گاهی اوقات پیش میادش که میخواهین یه برنامه کامپایل شده تو لینوکس رو در نسخه یا توزیع دیگه لینوکس اجرا کنید مشکلات وابستگی مثل این مواجه میشید که فلان lib نسخه اش نصب نیست یا ورژن سازگار نیست
مثلا libc که یکی از پر کاربردترین این موارد هستش که بهش گیر میده
پیدا کردن مشکل چرا برنامه کامپایل شده اجرا نمیشه؟
خب اول این که باید موقع اجرا به صورت کامند لاین ببنیم چه اروری داریم؟ به چه لایبری یا کتابخونه ای گیر میده مثلا: libc6
خب ابتدا سعی میکنیم اونو نصبش کنیم:
apt install libc6
خب هنوزم اجرا نمیشه خب پس میریم سراغ مرحله بعدی بررسی فایل خروجی:
$ ldd target/release/ myapp
linux-vdso.so.1 (0x00007f633e94c000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f633e8f5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f633e805000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f633e00b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f633e94e000)
خب این داره نشون میده چند تا کتابخونه برای اجرای این برنامه لازمه یه شکل دیگه کامپایل کنیم
رفع مشکل حتمی: کامپایل برنامه با statically linked در rust
خب حالا که اینجوری شد باید چند تا چیز نصب کنیم:
$ apt install musl-tools musl-dev
$ rustup target add x86_64-unknown-linux-musl
خب بعد از نصب اینا حالا کامپایل رو مجدد این شکلی انجام میدیم:
$ cargo build --release --target x86_64-unknown-linux-musl
خب فایل کامپایل شده جدید رو تو مسیر چک میکنیم:
$ ldd target/x86_64-unknown-linux-musl/release/myapp
statically linked
خب حالا این هر جایی دلتون خواست اجرا میشه البته لینوکس نه سیستم عامل دیگه 😁
اول از همه کوچک ترین عضو مجموعه 4xmen بنده حقیر هستم.
در ثانی یک توسعه دهنده هستم زمینه های تخصصی کارم :
Delphi, Rust ,PHP, C++ ,Python, JavaScript, Unity game engine, C#, asm
و علاقه مند به لینوکس، RCE ، کریپتوگرافی هستم.
تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه.
یا حق، با حق، تا حق


دیدگاهتان را بنویسید لغو پاسخ