برای طرح سوال و دسترسی به آموزش ها  کانال ما در تلگرام بپویندید  

رفع مشکل وابستگی rust برای کامپایل نسخه لینوکس

گاهی اوقات پیش میادش که می‌خواهین یه برنامه کامپایل شده تو لینوکس رو در نسخه یا توزیع دیگه لینوکس اجرا کنید مشکلات وابستگی مثل این مواجه می‌شید که فلان 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

خب حالا این هر جایی دلتون خواست اجرا میشه البته لینوکس نه سیستم عامل دیگه 😁


انتشار

در

,

توسط

نظرات

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *