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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: hamidrezakp در 17 امرداد 1394، 12:28 ب‌ظ

عنوان: برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: hamidrezakp در 17 امرداد 1394، 12:28 ب‌ظ
سلام.یه برنامه Qt/C++ نوشتم و و روی سیستم خودم هم باز میشه . حالا نمیدونم چطوری اونو به بقیه بدم تا نخوان کتابخونه های qt رو دانلود کنن یا اگر باید دانلود کنن چه چیز هایی رو نیاز دارن؟
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: احمد حمزه ئی در 17 امرداد 1394، 04:10 ب‌ظ
سلام.یه برنامه Qt/C++ نوشتم و و روی سیستم خودم هم باز میشه . حالا نمیدونم چطوری اونو به بقیه بدم تا نخوان کتابخونه های qt رو دانلود کنن یا اگر باید دانلود کنن چه چیز هایی رو نیاز دارن؟

سلام من این برنامه مدیریت کرون (http://forum.ubuntu.ir/index.php/topic,121541.msg986362.html) شما رو تست کردم اجرا شد.

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 درست کنید خیلی بهتره که بازم روشش رو نمیدونم!
اگه کسی بلده، توضیح بده.
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: hamidrezakp در 17 امرداد 1394، 06:25 ب‌ظ
سلام.یه برنامه Qt/C++ نوشتم و و روی سیستم خودم هم باز میشه . حالا نمیدونم چطوری اونو به بقیه بدم تا نخوان کتابخونه های qt رو دانلود کنن یا اگر باید دانلود کنن چه چیز هایی رو نیاز دارن؟

سلام من این برنامه مدیریت کرون (http://forum.ubuntu.ir/index.php/topic,121541.msg986362.html) شما رو تست کردم اجرا شد.

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 درست کنید خیلی بهتره که بازم روشش رو نمیدونم!
اگه کسی بلده، توضیح بده.

خیلی ممنون از فیدبک و راهنمایی. حتما روی روش هایی که گفتین کار میکنم.
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: hamidrezakp در 17 امرداد 1394، 07:45 ب‌ظ
برای قرار دادن کتابخونه ها باید دوباره qt رو استاتیک کامپایل کنم که فکر کنم این روش حجم فایل رو میبره بالا.
برای نصب کتابخونه ها به صورت جدا هنوز نتونستم بسته ایی پیدا کنم که فقط برای اجرای برنامه های qt باشه و کتابخونه های مورد نیاز برای اجرا رو داشته باشه.اگر پیدا کردید خبر بدین .
خیلی ممنون
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: nixoeen در 17 امرداد 1394، 08:07 ب‌ظ
لینک (https://wiki.debian.org/HowToPackageForDebian)
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: majidkamali1370 در 18 امرداد 1394، 11:50 ق‌ظ
سلام
با دستور ldd ببینید کدوم کتابخونه های Qt یا هر کتابخونه دیگه رو نیاز دارید. اونا رو از /usr/lib/ کپی کنید به جایی که فایل اجرایی برنامه هست.
بعد میشه اون فولدر رو بدون نیاز به نصب برنامه خاصی ببرید جای دیگه و اجراش کنید.
سایت voidrealms.com در قسمت tutorials، بخش Qt، قسمت ۸۴ از سری آموزشی، این راه رو توضیح داده. متاسفانه توی سایت خودش حتی لینک youtube رو هم پیدا نکردم ولی اگه سرچ کنید حتما پیدا میشه.

موفق باشید
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: hamidrezakp در 18 امرداد 1394، 12:01 ب‌ظ
سلام
با دستور ldd ببینید کدوم کتابخونه های Qt یا هر کتابخونه دیگه رو نیاز دارید. اونا رو از /usr/lib/ کپی کنید به جایی که فایل اجرایی برنامه هست.
بعد میشه اون فولدر رو بدون نیاز به نصب برنامه خاصی ببرید جای دیگه و اجراش کنید.
سایت voidrealms.com در قسمت tutorials، بخش Qt، قسمت ۸۴ از سری آموزشی، این راه رو توضیح داده. متاسفانه توی سایت خودش حتی لینک youtube رو هم پیدا نکردم ولی اگه سرچ کنید حتما پیدا میشه.

موفق باشید

ممنون ویدیو رو رفتم دیدم.این روش حجم برنامه رو بالا میبره. چطور میشه فقط کتابخونه هایی رو نصب کرد که برنامه نیاز داره . مثلا http://forum.ubuntu.ir/index.php/topic,121541.0.html (http://forum.ubuntu.ir/index.php/topic,121541.0.html) رو من نوشتم با qt وقتی به کاربری دادم که کیوت نداره باید چه دستوری بزنه تا فقط کتابخونه های مورد نیاز برنامه نصب بشه نه چیز دیگه؟؟
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: samis در 18 امرداد 1394، 12:29 ب‌ظ
چطور میشه فقط کتابخونه هایی رو نصب کرد که برنامه نیاز داره . مثلا http://forum.ubuntu.ir/index.php/topic,121541.0.html (http://forum.ubuntu.ir/index.php/topic,121541.0.html) رو من نوشتم با qt وقتی به کاربری دادم که کیوت نداره باید چه دستوری بزنه تا فقط کتابخونه های مورد نیاز برنامه نصب بشه نه چیز دیگه؟؟
خب شما لیست اون چیزایی که برای اجرای برنامه لازمه رو دربیار و بعد با یه اسکریپت ساده اونا رو نصب کن. اون اسکریپتم به اسم install بذار تو پوشه برنامه
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: hamidrezakp در 18 امرداد 1394، 12:44 ب‌ظ
چطور میشه فقط کتابخونه هایی رو نصب کرد که برنامه نیاز داره . مثلا http://forum.ubuntu.ir/index.php/topic,121541.0.html (http://forum.ubuntu.ir/index.php/topic,121541.0.html) رو من نوشتم با qt وقتی به کاربری دادم که کیوت نداره باید چه دستوری بزنه تا فقط کتابخونه های مورد نیاز برنامه نصب بشه نه چیز دیگه؟؟
خب شما لیست اون چیزایی که برای اجرای برنامه لازمه رو دربیار و بعد با یه اسکریپت ساده اونا رو نصب کن. اون اسکریپتم به اسم install بذار تو پوشه برنامه

مشکل اینجاست که اسم کتابخونه ها رو بلد نیستم . خروجی دستور lddرو نگاه کردم ولی بعضی هاشون توی مخازنم نبود اگر امکان داره شما برام پیدا کن و توی گیتهاب روی سورس پروژه میزارم (هنوز گیتهاب نداره ولی بزودی میسازم)
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: دانیال بهزادی در 18 امرداد 1394، 01:48 ب‌ظ
راه‌حل قطعی و منطقی اینه:
لینک (https://wiki.debian.org/HowToPackageForDebian)
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: hamidrezakp در 18 امرداد 1394، 03:13 ب‌ظ
راه‌حل قطعی و منطقی اینه:
لینک (https://wiki.debian.org/HowToPackageForDebian)

برنامه ام تموم بشه حتما چکش میکنم
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: majidkamali1370 در 18 امرداد 1394، 03:29 ب‌ظ
اگه میخوای از برنامه ppa درست کنی راخه حل همونی هست که دوستان لینک دادن. راه اصولی فقط همینه.
اما اگه صرفا یه چیزی هست که قراره با کپی کردن یه فولدر بشه ازش استفاده کرد، اون راهی که گفتم بهتره. چه لزومی داره برای یه برنامه که به سه چهار تا فایل کتابخونه Qt احتیاج داره، کل پکیج Qt رو نصب کرد
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: حامد مصافی در 24 امرداد 1394، 01:01 ب‌ظ
من به عنوان یک راه سریع این کد رو نوشتم،این دستور کتابخانه‌های کیوت مورد نیاز رو به کنار فایل اجرایی کپی می‌کنه.
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 کنی.

عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: hamidrezakp در 24 امرداد 1394، 02:44 ب‌ظ
من به عنوان یک راه سریع این کد رو نوشتم،این دستور کتابخانه‌های کیوت مورد نیاز رو به کنار فایل اجرایی کپی می‌کنه.
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 با هزار زحمت درست کردم.
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: afotohi12 در 07 شهریور 1394، 07:23 ب‌ظ
سلام دوست عزیز من هم یه مشکل کوچیک دارم بپرسم شاید بدونید
من چطور میتونم کتابخانه های مورد نیازم را را به کامپایلر g++ اضافه کنم
در ویندوز نوشتم و مشکلی نبود ولی موقع کامپایل در لینوکس کتابخانه هارو پیدا نمیکنه و ارور میده
لطفا روش اضافه کردن کتابخانه به کامپایلر را یه توضیح کوچیک بدید ممنون
#include <conio.h>
#include <dos.h>
برای مثال این ۲ کتابخانه بالا
ممنون
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: علی ۵۰۰ در 07 شهریور 1394، 08:48 ب‌ظ
سلام دوست عزیز من هم یه مشکل کوچیک دارم بپرسم شاید بدونید
من چطور میتونم کتابخانه های مورد نیازم را را به کامپایلر g++ اضافه کنم
در ویندوز نوشتم و مشکلی نبود ولی موقع کامپایل در لینوکس کتابخانه هارو پیدا نمیکنه و ارور میده
لطفا روش اضافه کردن کتابخانه به کامپایلر را یه توضیح کوچیک بدید ممنون
#include <conio.h>
#include <dos.h>
برای مثال این ۲ کتابخانه بالا
ممنون
تا اونجایی که من اطلاع دارم این کتابخانه‌هایی که شما معرفی کردین، جزء استاندارد سی‌پلاس‌پلاس نیستن. بجای این‌ها، توی لینوکس از کتابخونه‌های دیگه استفاده کنید. شاید اگر تاپیک جدید بزنین زودتر به جواب برسین.
عنوان: پاسخ : برنامه qt/c++ رو نوشتم حالا چطوری اونو کامپایل کنم ؟
ارسال شده توسط: دانیال بهزادی در 07 شهریور 1394، 08:53 ب‌ظ
سلام دوست عزیز من هم یه مشکل کوچیک دارم بپرسم شاید بدونید
من چطور میتونم کتابخانه های مورد نیازم را را به کامپایلر g++ اضافه کنم
در ویندوز نوشتم و مشکلی نبود ولی موقع کامپایل در لینوکس کتابخانه هارو پیدا نمیکنه و ارور میده
لطفا روش اضافه کردن کتابخانه به کامپایلر را یه توضیح کوچیک بدید ممنون
#include <conio.h>
#include <dos.h>
برای مثال این ۲ کتابخانه بالا
ممنون
این‌ها چین؟ توی زبان سی++ چنین کتاب‌خونه‌هایی نداریم! احتمالاً مختص اون کامپایلر غیراستانداردیه که ازش تو ویندوز استفاده می‌کردی. همیشه سعی کن با استانداردها پیش بری.