انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟  (دفعات بازدید: 4390 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
سلام.یه برنامه Qt/C++ نوشتم و و روی سیستم خودم هم باز میشه . حالا نمیدونم چطوری اونو به بقیه بدم تا نخوان کتابخونه های qt رو دانلود کنن یا اگر باید دانلود کنن چه چیز هایی رو نیاز دارن؟
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

آفلاین احمد حمزه ئی

  • Jr. Member
  • *
  • ارسال: 66
  • جنسیت : پسر
    • Github
سلام.یه برنامه Qt/C++ نوشتم و و روی سیستم خودم هم باز میشه . حالا نمیدونم چطوری اونو به بقیه بدم تا نخوان کتابخونه های qt رو دانلود کنن یا اگر باید دانلود کنن چه چیز هایی رو نیاز دارن؟

سلام من این برنامه مدیریت کرون شما رو تست کردم اجرا شد.

ahmad@presto:~/Desktop/p$ file PersianCronEditor
PersianCronEditor: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=bbcd8de0715d1bb51eb5f595d333155fe85a58e3, not stripped

این نشون میده که برنامه رو سیستم های 64 بیتی اجرا میشه و بصورت dynamically linked هست پس از کتابخونه های اشتراکی موجود روی سیستم استفاده میکنه.
یعنی اینکه باید کتابخونه های مورد نیازش روی سیستم باشن تا اجرا بشه.

برای اینکه به بقیه بدیدش باید کتابخونه های مورد نیاز رو شناسایی کنید پس:
ahmad@presto:~/Desktop/p$ ldd PersianCronEditor
        linux-vdso.so.1 =>  (0x00007fff2e924000)
        libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f5211796000)
        libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f5211149000)
        libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f5210aa2000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f521079e000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5210588000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f52101c2000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f520ffa4000)
        libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f520fd53000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f520fa4a000)
        libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f520f715000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f520f40f000)
        libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f520f1e8000)
        libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f520ef93000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f520ed7a000)
        libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007f520eb13000)
        libicui18n.so.52 => /usr/lib/x86_64-linux-gnu/libicui18n.so.52 (0x00007f520e70c000)
        libicuuc.so.52 => /usr/lib/x86_64-linux-gnu/libicuuc.so.52 (0x00007f520e393000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f520e18e000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f520df86000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5211fdb000)
        libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f520dd7d000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f520db3f000)
        libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f520d920000)
        libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f520d67c000)
        libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f520d460000)
        libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007f520d239000)
        libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f520d026000)
        libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f520ce23000)
        libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f520cc1d000)
        libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f520ca1a000)
        libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f520c803000)
        libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007f520c5fe000)
        libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007f520c3fa000)
        libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007f520c1f7000)
        libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f520bff1000)
        libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007f520bdee000)
        libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f520bbe8000)
        libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f520b9dc000)
        libicudata.so.52 => /usr/lib/x86_64-linux-gnu/libicudata.so.52 (0x00007f520a16e000)
        libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f5209f6a000)
        libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f5209d63000)

حالا باید برید ببینید کدوم بسته ها این کتابخونه ها رو درونشون دارن:
من یه برنامه qt دیگه رو چک کردم(Zeal) و به این بسته ها رسیدم:
libqt5widgets5
libqt5gui5
libqt5core5a
libstdc++6
libgcc1
libc6
libx11-6

البته این لیست ممکنه کامل نباشه، خودتون بیشتر تحقیق کنید!
باید برنامه هایی که از qt5 استفاده میکنن رو چک کنید ببینید چه پیش نیاز هایی دارن.

روش دیگه اینه که بصورت static linked برنامه رو بسازید، یعنی که کتابخونه ها داخل برنامه باشه.
در اینصورت حجم برنامه میره بالا و کتابخونه ها امکان آپدیت ندارن چون درون فایل اجرایی هستن.
روشش رو بلد نیستم باید بگردید!

برای ساخت پکیج deb هم این اسکریپت رو نگاه کنید:
https://github.com/AhmadHamzeei/unity-dilmaj/blob/master/make_deb.sh
اگه بتونید ppa درست کنید خیلی بهتره که بازم روشش رو نمیدونم!
اگه کسی بلده، توضیح بده.

آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
سلام.یه برنامه Qt/C++ نوشتم و و روی سیستم خودم هم باز میشه . حالا نمیدونم چطوری اونو به بقیه بدم تا نخوان کتابخونه های qt رو دانلود کنن یا اگر باید دانلود کنن چه چیز هایی رو نیاز دارن؟

سلام من این برنامه مدیریت کرون شما رو تست کردم اجرا شد.

ahmad@presto:~/Desktop/p$ file PersianCronEditor
PersianCronEditor: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=bbcd8de0715d1bb51eb5f595d333155fe85a58e3, not stripped

این نشون میده که برنامه رو سیستم های 64 بیتی اجرا میشه و بصورت dynamically linked هست پس از کتابخونه های اشتراکی موجود روی سیستم استفاده میکنه.
یعنی اینکه باید کتابخونه های مورد نیازش روی سیستم باشن تا اجرا بشه.

برای اینکه به بقیه بدیدش باید کتابخونه های مورد نیاز رو شناسایی کنید پس:
ahmad@presto:~/Desktop/p$ ldd PersianCronEditor
        linux-vdso.so.1 =>  (0x00007fff2e924000)
        libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f5211796000)
        libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f5211149000)
        libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f5210aa2000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f521079e000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5210588000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f52101c2000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f520ffa4000)
        libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f520fd53000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f520fa4a000)
        libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f520f715000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f520f40f000)
        libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f520f1e8000)
        libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f520ef93000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f520ed7a000)
        libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007f520eb13000)
        libicui18n.so.52 => /usr/lib/x86_64-linux-gnu/libicui18n.so.52 (0x00007f520e70c000)
        libicuuc.so.52 => /usr/lib/x86_64-linux-gnu/libicuuc.so.52 (0x00007f520e393000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f520e18e000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f520df86000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5211fdb000)
        libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f520dd7d000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f520db3f000)
        libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f520d920000)
        libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f520d67c000)
        libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f520d460000)
        libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007f520d239000)
        libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f520d026000)
        libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f520ce23000)
        libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f520cc1d000)
        libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f520ca1a000)
        libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f520c803000)
        libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007f520c5fe000)
        libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007f520c3fa000)
        libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007f520c1f7000)
        libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f520bff1000)
        libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007f520bdee000)
        libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f520bbe8000)
        libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f520b9dc000)
        libicudata.so.52 => /usr/lib/x86_64-linux-gnu/libicudata.so.52 (0x00007f520a16e000)
        libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f5209f6a000)
        libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f5209d63000)

حالا باید برید ببینید کدوم بسته ها این کتابخونه ها رو درونشون دارن:
من یه برنامه qt دیگه رو چک کردم(Zeal) و به این بسته ها رسیدم:
libqt5widgets5
libqt5gui5
libqt5core5a
libstdc++6
libgcc1
libc6
libx11-6

البته این لیست ممکنه کامل نباشه، خودتون بیشتر تحقیق کنید!
باید برنامه هایی که از qt5 استفاده میکنن رو چک کنید ببینید چه پیش نیاز هایی دارن.

روش دیگه اینه که بصورت static linked برنامه رو بسازید، یعنی که کتابخونه ها داخل برنامه باشه.
در اینصورت حجم برنامه میره بالا و کتابخونه ها امکان آپدیت ندارن چون درون فایل اجرایی هستن.
روشش رو بلد نیستم باید بگردید!

برای ساخت پکیج deb هم این اسکریپت رو نگاه کنید:
https://github.com/AhmadHamzeei/unity-dilmaj/blob/master/make_deb.sh
اگه بتونید ppa درست کنید خیلی بهتره که بازم روشش رو نمیدونم!
اگه کسی بلده، توضیح بده.

خیلی ممنون از فیدبک و راهنمایی. حتما روی روش هایی که گفتین کار میکنم.
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
برای قرار دادن کتابخونه ها باید دوباره qt رو استاتیک کامپایل کنم که فکر کنم این روش حجم فایل رو میبره بالا.
برای نصب کتابخونه ها به صورت جدا هنوز نتونستم بسته ایی پیدا کنم که فقط برای اجرای برنامه های qt باشه و کتابخونه های مورد نیاز برای اجرا رو داشته باشه.اگر پیدا کردید خبر بدین .
خیلی ممنون
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.


آفلاین majidkamali1370

  • Hero Member
  • *
  • ارسال: 928
  • جنسیت : پسر
سلام
با دستور ldd ببینید کدوم کتابخونه های Qt یا هر کتابخونه دیگه رو نیاز دارید. اونا رو از /usr/lib/ کپی کنید به جایی که فایل اجرایی برنامه هست.
بعد میشه اون فولدر رو بدون نیاز به نصب برنامه خاصی ببرید جای دیگه و اجراش کنید.
سایت voidrealms.com در قسمت tutorials، بخش Qt، قسمت ۸۴ از سری آموزشی، این راه رو توضیح داده. متاسفانه توی سایت خودش حتی لینک youtube رو هم پیدا نکردم ولی اگه سرچ کنید حتما پیدا میشه.

موفق باشید
« آخرین ویرایش: 18 امرداد 1394، 11:52 ق‌ظ توسط majidkamali1370 »
Ubuntu 14.04 LTS 64-bit - unity

آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
سلام
با دستور ldd ببینید کدوم کتابخونه های Qt یا هر کتابخونه دیگه رو نیاز دارید. اونا رو از /usr/lib/ کپی کنید به جایی که فایل اجرایی برنامه هست.
بعد میشه اون فولدر رو بدون نیاز به نصب برنامه خاصی ببرید جای دیگه و اجراش کنید.
سایت voidrealms.com در قسمت tutorials، بخش Qt، قسمت ۸۴ از سری آموزشی، این راه رو توضیح داده. متاسفانه توی سایت خودش حتی لینک youtube رو هم پیدا نکردم ولی اگه سرچ کنید حتما پیدا میشه.

موفق باشید

ممنون ویدیو رو رفتم دیدم.این روش حجم برنامه رو بالا میبره. چطور میشه فقط کتابخونه هایی رو نصب کرد که برنامه نیاز داره . مثلا http://forum.ubuntu.ir/index.php/topic,121541.0.html رو من نوشتم با qt وقتی به کاربری دادم که کیوت نداره باید چه دستوری بزنه تا فقط کتابخونه های مورد نیاز برنامه نصب بشه نه چیز دیگه؟؟
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

آفلاین samis

  • Full Member
  • *
  • ارسال: 112
چطور میشه فقط کتابخونه هایی رو نصب کرد که برنامه نیاز داره . مثلا http://forum.ubuntu.ir/index.php/topic,121541.0.html رو من نوشتم با qt وقتی به کاربری دادم که کیوت نداره باید چه دستوری بزنه تا فقط کتابخونه های مورد نیاز برنامه نصب بشه نه چیز دیگه؟؟
خب شما لیست اون چیزایی که برای اجرای برنامه لازمه رو دربیار و بعد با یه اسکریپت ساده اونا رو نصب کن. اون اسکریپتم به اسم install بذار تو پوشه برنامه
به گمانم در هیچ جای دنیا دو الف مست را پیدا نخواهید کرد! البته بجز در سردابه های الف های سیاه بیشه!

آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
چطور میشه فقط کتابخونه هایی رو نصب کرد که برنامه نیاز داره . مثلا http://forum.ubuntu.ir/index.php/topic,121541.0.html رو من نوشتم با qt وقتی به کاربری دادم که کیوت نداره باید چه دستوری بزنه تا فقط کتابخونه های مورد نیاز برنامه نصب بشه نه چیز دیگه؟؟
خب شما لیست اون چیزایی که برای اجرای برنامه لازمه رو دربیار و بعد با یه اسکریپت ساده اونا رو نصب کن. اون اسکریپتم به اسم install بذار تو پوشه برنامه

مشکل اینجاست که اسم کتابخونه ها رو بلد نیستم . خروجی دستور lddرو نگاه کردم ولی بعضی هاشون توی مخازنم نبود اگر امکان داره شما برام پیدا کن و توی گیتهاب روی سورس پروژه میزارم (هنوز گیتهاب نداره ولی بزودی میسازم)
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19724
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

آفلاین majidkamali1370

  • Hero Member
  • *
  • ارسال: 928
  • جنسیت : پسر
اگه میخوای از برنامه ppa درست کنی راخه حل همونی هست که دوستان لینک دادن. راه اصولی فقط همینه.
اما اگه صرفا یه چیزی هست که قراره با کپی کردن یه فولدر بشه ازش استفاده کرد، اون راهی که گفتم بهتره. چه لزومی داره برای یه برنامه که به سه چهار تا فایل کتابخونه Qt احتیاج داره، کل پکیج Qt رو نصب کرد
Ubuntu 14.04 LTS 64-bit - unity

آفلاین حامد مصافی

  • Jr. Member
  • *
  • ارسال: 60
من به عنوان یک راه سریع این کد رو نوشتم،این دستور کتابخانه‌های کیوت مورد نیاز رو به کنار فایل اجرایی کپی می‌کنه.
ldd $1 | grep -i qt  | egrep -o '/.*\.so.* ' | sed -e 's/\s//g' | tr \\n \\0 | xargs -0 -I{} cp "{}" .
در قدم بعدی شما باید اسکریپت اجرای فایل اجرایی و پلاگین‌های مورد نیاز و کتابخانه(های) پلت‌فرم رو اضافه کنید.
تمام اینها در حالتی هست که شما می‌خواهید یک بسته فشرده بدون وابستگی ارائه کنید.
اسکریپت اجرای فایل اجرایی یک اسکریپت هست که قبل از اجرای فایل مسیر جاری رو در LD_LIBRARY_PATH ست می‌کنه تا کتابخانه‌ها قابل شناسایی باشند. این فایل همنام فایل اجرایی و با پسوند sh هستو سورسش هم اینه:

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
 
dirname=`dirname $0`
tmp="${dirname#?}"
 
if [ "${dirname%$tmp}" != "/" ]; then
  dirname=$PWD/$dirname
fi

LD_LIBRARY_PATH=$dirname                                                                                                                                                                                                         
export LD_LIBRARY_PATH                                                                                                                                                                                                           
exec $dirname/$appname "$@"

بهتره بسته‌های deb و rmp بدون کتابخانه‌های جانبی و یک فایل فشرده همراه با کتابخانه‌های وابسته ارائه کنید. تا همه کاربران مجبور نباشند بسته‌های سنگین دانلود کنند.

اگر نسخه کامپایل شده ارائه می‌کنید باید به نسخه مورد استفاده برای کامپایل و نسخه‌هایی که سازگاری بایناری دارند نیز توجه کنید.برای مثال ۵.۴ روی ویندوز سازگاری بایناری با نسخه‌های پیشین نداشت که در ۵.۴.۱ رفع شد.

نکته دیگه اینه که سیستمی که روش کامپایل می‌کنی (در حالت ارائه بایناری) حتما استیبل باشه و از سیستم به روز استفاده نکن. من یکبار روی دبیان ناپایدار کامپایل کردم و دادم به مشتری اما اجرا نشد. بعداً فهمیدم که نسخه glibc روی سیستم من جدید تر بود و روی دبیان پایدار ناسازگاری بایناری وجود داره. برای این منظور من روی ویرچوال‌باکس یک دبیان پایدار دارم که برای کامپایل نهایی ازش استفاده می‌کنم.

اگر ساخت بسته‌های deb و rpm برات سخته یا وقت‌گیره میتونی از epm استفاده کنی. یا اینکه deb رو بسازی بعد با alien تبدیل به rpm کنی.


آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
من به عنوان یک راه سریع این کد رو نوشتم،این دستور کتابخانه‌های کیوت مورد نیاز رو به کنار فایل اجرایی کپی می‌کنه.
ldd $1 | grep -i qt  | egrep -o '/.*\.so.* ' | sed -e 's/\s//g' | tr \\n \\0 | xargs -0 -I{} cp "{}" .
در قدم بعدی شما باید اسکریپت اجرای فایل اجرایی و پلاگین‌های مورد نیاز و کتابخانه(های) پلت‌فرم رو اضافه کنید.
تمام اینها در حالتی هست که شما می‌خواهید یک بسته فشرده بدون وابستگی ارائه کنید.
اسکریپت اجرای فایل اجرایی یک اسکریپت هست که قبل از اجرای فایل مسیر جاری رو در LD_LIBRARY_PATH ست می‌کنه تا کتابخانه‌ها قابل شناسایی باشند. این فایل همنام فایل اجرایی و با پسوند sh هستو سورسش هم اینه:

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
 
dirname=`dirname $0`
tmp="${dirname#?}"
 
if [ "${dirname%$tmp}" != "/" ]; then
  dirname=$PWD/$dirname
fi

LD_LIBRARY_PATH=$dirname                                                                                                                                                                                                         
export LD_LIBRARY_PATH                                                                                                                                                                                                           
exec $dirname/$appname "$@"

بهتره بسته‌های deb و rmp بدون کتابخانه‌های جانبی و یک فایل فشرده همراه با کتابخانه‌های وابسته ارائه کنید. تا همه کاربران مجبور نباشند بسته‌های سنگین دانلود کنند.

اگر نسخه کامپایل شده ارائه می‌کنید باید به نسخه مورد استفاده برای کامپایل و نسخه‌هایی که سازگاری بایناری دارند نیز توجه کنید.برای مثال ۵.۴ روی ویندوز سازگاری بایناری با نسخه‌های پیشین نداشت که در ۵.۴.۱ رفع شد.

نکته دیگه اینه که سیستمی که روش کامپایل می‌کنی (در حالت ارائه بایناری) حتما استیبل باشه و از سیستم به روز استفاده نکن. من یکبار روی دبیان ناپایدار کامپایل کردم و دادم به مشتری اما اجرا نشد. بعداً فهمیدم که نسخه glibc روی سیستم من جدید تر بود و روی دبیان پایدار ناسازگاری بایناری وجود داره. برای این منظور من روی ویرچوال‌باکس یک دبیان پایدار دارم که برای کامپایل نهایی ازش استفاده می‌کنم.

اگر ساخت بسته‌های deb و rpm برات سخته یا وقت‌گیره میتونی از epm استفاده کنی. یا اینکه deb رو بسازی بعد با alien تبدیل به rpm کنی.
ممنون اسکریپتت واقعا عالی هست.فعلا یه بسته deb با هزار زحمت درست کردم.
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

آفلاین afotohi12

  • Newbie
  • *
  • ارسال: 8
  • جنسیت : پسر
سلام دوست عزیز من هم یه مشکل کوچیک دارم بپرسم شاید بدونید
من چطور میتونم کتابخانه های مورد نیازم را را به کامپایلر g++ اضافه کنم
در ویندوز نوشتم و مشکلی نبود ولی موقع کامپایل در لینوکس کتابخانه هارو پیدا نمیکنه و ارور میده
لطفا روش اضافه کردن کتابخانه به کامپایلر را یه توضیح کوچیک بدید ممنون
#include <conio.h>
#include <dos.h>
برای مثال این ۲ کتابخانه بالا
ممنون