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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: 🇮🇷 در 16 خرداد 1400، 10:24 ب‌ظ

عنوان: ارور در gcc (حل شد)
ارسال شده توسط: 🇮🇷 در 16 خرداد 1400، 10:24 ب‌ظ
وقتی کد رو در gcc و g++ کامپایل می کنم، به ترتیب ارور های زیر رو میگیرم:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
/usr/bin/ld: /tmp/ccSc70b7.o: in function `__static_initialization_and_destruction_0(int, int)':
/usr/include/c++/9/iostream:74: undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: /usr/include/c++/9/iostream:74: undefined reference to `std::ios_base::Init::~Init()'
/usr/bin/ld: /tmp/ccSc70b7.o: in function `Stack::print()':
/home/reza/Dropbox/Data_struct/C++/Stack.cpp:153: undefined reference to `std::cout'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/Stack.cpp:153: undefined reference to `std::ostream::operator<<(int)'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/Stack.cpp:153: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/Stack.cpp:153: undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/usr/bin/ld: /tmp/ccSc70b7.o: in function `Queue::two_to_one()':
/home/reza/Dropbox/Data_struct/C++/queue_arr2.cpp:32: undefined reference to `std::cout'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/queue_arr2.cpp:32: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/queue_arr2.cpp:32: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/queue_arr2.cpp:32: undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
collect2: error: ld returned 1 exit status
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status
دلیل بروز این ارور و روش رفع اون چیه؟
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: esmaeelE در 17 خرداد 1400، 12:32 ق‌ظ
کد را هم قرار دهید.
احتمالا نتونسته تابع main را پیدا کنه.
هر برنامه C یا ++C نیاز به یک و تنها یک ()main داره.

عنوان: پاسخ : ارور در gcc
ارسال شده توسط: alend در 17 خرداد 1400، 05:31 ق‌ظ
وقتی کد رو در gcc و g++ کامپایل می کنم، به ترتیب ارور های زیر رو میگیرم:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
/usr/bin/ld: /tmp/ccSc70b7.o: in function `__static_initialization_and_destruction_0(int, int)':
/usr/include/c++/9/iostream:74: undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: /usr/include/c++/9/iostream:74: undefined reference to `std::ios_base::Init::~Init()'
/usr/bin/ld: /tmp/ccSc70b7.o: in function `Stack::print()':
/home/reza/Dropbox/Data_struct/C++/Stack.cpp:153: undefined reference to `std::cout'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/Stack.cpp:153: undefined reference to `std::ostream::operator<<(int)'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/Stack.cpp:153: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/Stack.cpp:153: undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/usr/bin/ld: /tmp/ccSc70b7.o: in function `Queue::two_to_one()':
/home/reza/Dropbox/Data_struct/C++/queue_arr2.cpp:32: undefined reference to `std::cout'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/queue_arr2.cpp:32: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/queue_arr2.cpp:32: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/usr/bin/ld: /home/reza/Dropbox/Data_struct/C++/queue_arr2.cpp:32: undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
collect2: error: ld returned 1 exit status
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status
دلیل بروز این ارور و روش رفع اون چیه؟
ظاهرا در در قسمت لینکینگ مشکل دارد.
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: sameet در 17 خرداد 1400، 09:31 ق‌ظ
شما تابع main() رو برسی کن و درست مسیر دهی کن
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 17 خرداد 1400، 11:02 ق‌ظ
کد را هم قرار دهید.
احتمالا نتونسته تابع main را پیدا کنه.
هر برنامه C یا ++C نیاز به یک و تنها یک ()main داره.
یه فایل C++ دست ساز خودم رو include کردم. اون فایل main() نداره. باید اونم main داشته باشه؟ تنها یه کلاس داخل اون فایل هست که برای استفاده از اون، includeش کردم
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 17 خرداد 1400، 11:03 ق‌ظ
ظاهرا در در قسمت لینکینگ مشکل دارد.
میشه بیشتر توضیح بدید؟
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: nixoeen در 17 خرداد 1400، 02:12 ب‌ظ
باید با c- کامپایل کنید.
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: alend در 17 خرداد 1400، 05:32 ب‌ظ
ظاهرا در در قسمت لینکینگ مشکل دارد.
میشه بیشتر توضیح بدید؟
سورس کد را امکان دارد بگذارید؟
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 17 خرداد 1400، 05:37 ب‌ظ
ظاهرا در در قسمت لینکینگ مشکل دارد.
میشه بیشتر توضیح بدید؟
سورس کد را امکان دارد بگذارید؟
ببخشید کمی زیاده. فقط بگید لینکینگ چیه کافیه
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: Dragon- در 17 خرداد 1400، 06:09 ب‌ظ
از سوئیچ‌ lm- استفاده کنید.
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: esmaeelE در 17 خرداد 1400، 07:31 ب‌ظ
ظاهرا در در قسمت لینکینگ مشکل دارد.
میشه بیشتر توضیح بدید؟
سورس کد را امکان دارد بگذارید؟
ببخشید کمی زیاده. فقط بگید لینکینگ چیه کافیه
از سرویس pastebin استفاده کنید.
https://paste.ubuntu.ir

عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 17 خرداد 1400، 08:52 ب‌ظ
از سرویس pastebin استفاده کنید.
https://paste.ubuntu.ir
فایل اصلی: https://paste.ubuntu.ir/mbmw
فایل Stack.cpp که در فایل اصلی include شده: https://paste.ubuntu.ir/unfr
نقل‌قول
*** البته الگوریتمشون یه طراحی اولیه س که قراره روشون کار کنم.
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 17 خرداد 1400، 08:54 ب‌ظ
باید با c- کامپایل کنید.
آخه در اون صورت فایل .o ساخته میشه ولی هدف من ساخت فایل executable هست
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 17 خرداد 1400، 08:56 ب‌ظ
از سوئیچ‌ lm- استفاده کنید.
این سوییچ چیکار می کنه؟
خروجی کامپایل با این سوییچ:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
/usr/bin/ld: /tmp/ccXUbX2p.o: in function `__static_initialization_and_destruction_0(int, int)':
Stack.cpp:(.text+0x29): undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: Stack.cpp:(.text+0x3e): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: esmaeelE در 18 خرداد 1400، 08:16 ق‌ظ
تابع main اشتباه تایپی داره به
int main()اصلاح کنید.

کامپایل
g++ stack.cpp code.cpp -o executable
اجرا
./executable
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 18 خرداد 1400، 10:25 ق‌ظ
تابع main اشتباه تایپی داره به
int main()اصلاح کنید.

کامپایل
g++ stack.cpp code.cpp -o executable
اجرا
./executable
ممنونم. این اشتباه رو اصلاح کردم ولی باز هم ارور میده:
/usr/bin/ld: /tmp/ccCqjdnr.o: in function `__static_initialization_and_destruction_0(int, int)':
Stack.cpp:(.text+0x29): undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: Stack.cpp:(.text+0x3e): undefined reference to `std::ios_base::Init::~Init()'
/usr/bin/ld: /tmp/cctCV44p.o: in function `__static_initialization_and_destruction_0(int, int)':
queue_arr2.cpp:(.text+0x10d): undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: queue_arr2.cpp:(.text+0x122): undefined reference to `std::ios_base::Init::~Init()'
/usr/bin/ld: /tmp/cctCV44p.o: in function `Stack::print()':
queue_arr2.cpp:(.text._ZN5Stack5printEv[_ZN5Stack5printEv]+0x2f): undefined reference to `std::cout'
/usr/bin/ld: queue_arr2.cpp:(.text._ZN5Stack5printEv[_ZN5Stack5printEv]+0x34): undefined reference to `std::ostream::operator<<(int)'
/usr/bin/ld: queue_arr2.cpp:(.text._ZN5Stack5printEv[_ZN5Stack5printEv]+0x3e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/usr/bin/ld: queue_arr2.cpp:(.text._ZN5Stack5printEv[_ZN5Stack5printEv]+0x49): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/usr/bin/ld: /tmp/cctCV44p.o: in function `Queue::two_to_one()':
queue_arr2.cpp:(.text._ZN5Queue10two_to_oneEv[_ZN5Queue10two_to_oneEv]+0x69): undefined reference to `__cxa_allocate_exception'
/usr/bin/ld: queue_arr2.cpp:(.text._ZN5Queue10two_to_oneEv[_ZN5Queue10two_to_oneEv]+0x7f): undefined reference to `typeinfo for char const*'
/usr/bin/ld: queue_arr2.cpp:(.text._ZN5Queue10two_to_oneEv[_ZN5Queue10two_to_oneEv]+0x87): undefined reference to `__cxa_throw'
collect2: error: ld returned 1 exit status
queue_arr2.cpp همون فایل اصلی من هست
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: Dragon- در 18 خرداد 1400، 01:16 ب‌ظ
از سوئیچ‌ lm- استفاده کنید.
این سوییچ چیکار می کنه؟
خروجی کامپایل با این سوییچ:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
/usr/bin/ld: /tmp/ccXUbX2p.o: in function `__static_initialization_and_destruction_0(int, int)':
Stack.cpp:(.text+0x29): undefined reference to `std::ios_base::Init::Init()'
/usr/bin/ld: Stack.cpp:(.text+0x3e): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status

دقیقا نمی‌دونم چی‌کار می‌کنه. وقتی از math.h توی c استفاده می‌کنم، باید سوئیچ lm- رو هم بزارم وگرنه خطایی شبیه خطای شما می‌گیرم. اینو فکر کنم توی askubuntu پیدا کردم. مطمئن نیستم.

حالا که مشکل اسم main رو حل کردید، دوباره سعی کنید با سوئیچ lm- کامپایل کنید.
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: sd70 در 18 خرداد 1400، 01:33 ب‌ظ
من کد شما رو بررسی کردم و تنها اشکالش همون اشتباه تایپی تابع main بود و مشکل دیگری نداره و خروجیش هم به این صورته:
6
2
3
4
5

البته توجه داشته باشید که include کردن فایل cpp روش صحیحی نیست و به جاش باید از فایل های هدر استفاده بشه. اگه مشکل تون حل نشد لطفا تمام فایلهای کد رو بصورت یک جا آپلود کنید و این رو هم بگید که برای کامپایل دقیقا دستور رو به چه شکلی وارد می کنید

فلگ l برای لینک کردن کاربرد داره. مثلا چنان چه از math.h (یا cmath در سی++) استفاده کنید باید به لینکر اعلام کنید که از این لایبرری استفاده کنه و برای این کار از -lm استفاده میشه. با توجه به اینکه در کد شما از هدر cmath استفاده نشده نیازی به این کار نیست.
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: esmaeelE در 19 خرداد 1400، 01:15 ق‌ظ
همانطور که کاربر sd70 گفتند برنامه با اصلاح اشکال تایپی main مشکلی نداره
کامپایل و اجرا میشه
$ g++ code.cpp stack.cpp -o executable
$ ./executable
6
2
3
4
5

به پیوست بنگرید.

عنوان: پاسخ : ارور در gcc
ارسال شده توسط: alend در 19 خرداد 1400، 07:59 ق‌ظ


البته توجه داشته باشید که include کردن فایل cpp روش صحیحی نیست و به جاش باید از فایل های هدر استفاده بشه. اگه مشکل تون حل نشد لطفا تمام فایلهای کد رو بصورت یک جا آپلود کنید و این رو هم بگید که برای کامپایل دقیقا دستور رو به چه شکلی وارد می کنید


دقیقاً. باید از ماکرو ها برای گارد هدر هم استفاده کرد.

https://www.learncpp.com/cpp-tutorial/header-guards/ (https://www.learncpp.com/cpp-tutorial/header-guards/)
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 19 خرداد 1400، 02:35 ب‌ظ
همانطور که کاربر sd70 گفتند برنامه با اصلاح اشکال تایپی main مشکلی نداره
کامپایل و اجرا میشه
$ g++ code.cpp stack.cpp -o executable
$ ./executable
6
2
3
4
5

به پیوست بنگرید.
پس مشکل از چیه؟ من پیوست شما رو دانلود و استخراج کردم. وقتی خواستم کامپایلش کنم باز هم همین ارور رو گرفتم
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: esmaeelE در 19 خرداد 1400، 10:43 ب‌ظ
همانطور که کاربر sd70 گفتند برنامه با اصلاح اشکال تایپی main مشکلی نداره
کامپایل و اجرا میشه
$ g++ code.cpp stack.cpp -o executable
$ ./executable
6
2
3
4
5

به پیوست بنگرید.
پس مشکل از چیه؟ من پیوست شما رو دانلود و استخراج کردم. وقتی خواستم کامپایلش کنم باز هم همین ارور رو گرفتم

درون پوشه دستور زیر را اجرا کنید و خروجی را به صورت کامل قرار دهید.
ls
g++ code.cpp stack.cpp -o executable

عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 20 خرداد 1400، 09:52 ق‌ظ
درون پوشه دستور زیر را اجرا کنید و خروجی را به صورت کامل قرار دهید.
ls
g++ code.cpp stack.cpp -o executable
بالاخره کامپایل شد. ممنونم که وقت گذاشتید. فکر کنم توی include کردن iostream مشکلی مثل دوبار include کردن یا چیزی مشابه این بود. باز هم تشکر
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: Dragon- در 20 خرداد 1400، 02:14 ب‌ظ
پس یه (حل شد) به عنوان موضوع اضافه کنید.
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: alend در 20 خرداد 1400، 05:27 ب‌ظ
درون پوشه دستور زیر را اجرا کنید و خروجی را به صورت کامل قرار دهید.
ls
g++ code.cpp stack.cpp -o executable
بالاخره کامپایل شد. ممنونم که وقت گذاشتید. فکر کنم توی include کردن iostream مشکلی مثل دوبار include کردن یا چیزی مشابه این بود. باز هم تشکر
من پست مربوط به گارد را به همین خاطر گذاشتم.
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 20 خرداد 1400، 11:53 ب‌ظ
درون پوشه دستور زیر را اجرا کنید و خروجی را به صورت کامل قرار دهید.
ls
g++ code.cpp stack.cpp -o executable
بالاخره کامپایل شد. ممنونم که وقت گذاشتید. فکر کنم توی include کردن iostream مشکلی مثل دوبار include کردن یا چیزی مشابه این بود. باز هم تشکر
من پست مربوط به گارد را به همین خاطر گذاشتم.
متشکرم
عنوان: پاسخ : ارور در gcc
ارسال شده توسط: 🇮🇷 در 20 خرداد 1400، 11:53 ب‌ظ
پس یه (حل شد) به عنوان موضوع اضافه کنید.
اضافه کردم