انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: 🇮🇷 در 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
دلیل بروز این ارور و روش رفع اون چیه؟
-
کد را هم قرار دهید.
احتمالا نتونسته تابع main را پیدا کنه.
هر برنامه C یا ++C نیاز به یک و تنها یک ()main داره.
-
وقتی کد رو در 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
دلیل بروز این ارور و روش رفع اون چیه؟
ظاهرا در در قسمت لینکینگ مشکل دارد.
-
شما تابع main() رو برسی کن و درست مسیر دهی کن
-
کد را هم قرار دهید.
احتمالا نتونسته تابع main را پیدا کنه.
هر برنامه C یا ++C نیاز به یک و تنها یک ()main داره.
یه فایل C++ دست ساز خودم رو include کردم. اون فایل main() نداره. باید اونم main داشته باشه؟ تنها یه کلاس داخل اون فایل هست که برای استفاده از اون، includeش کردم
-
ظاهرا در در قسمت لینکینگ مشکل دارد.
میشه بیشتر توضیح بدید؟
-
باید با c- کامپایل کنید.
-
ظاهرا در در قسمت لینکینگ مشکل دارد.
میشه بیشتر توضیح بدید؟
سورس کد را امکان دارد بگذارید؟
-
ظاهرا در در قسمت لینکینگ مشکل دارد.
میشه بیشتر توضیح بدید؟
سورس کد را امکان دارد بگذارید؟
ببخشید کمی زیاده. فقط بگید لینکینگ چیه کافیه
-
از سوئیچ lm- استفاده کنید.
-
ظاهرا در در قسمت لینکینگ مشکل دارد.
میشه بیشتر توضیح بدید؟
سورس کد را امکان دارد بگذارید؟
ببخشید کمی زیاده. فقط بگید لینکینگ چیه کافیه
از سرویس pastebin استفاده کنید.
https://paste.ubuntu.ir
-
از سرویس pastebin استفاده کنید.
https://paste.ubuntu.ir
فایل اصلی: https://paste.ubuntu.ir/mbmw
فایل Stack.cpp که در فایل اصلی include شده: https://paste.ubuntu.ir/unfr
*** البته الگوریتمشون یه طراحی اولیه س که قراره روشون کار کنم.
-
باید با c- کامپایل کنید.
آخه در اون صورت فایل .o ساخته میشه ولی هدف من ساخت فایل executable هست
-
از سوئیچ 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
-
تابع main اشتباه تایپی داره به
int main()
اصلاح کنید.
کامپایل
g++ stack.cpp code.cpp -o executable
اجرا
./executable
-
تابع 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 همون فایل اصلی من هست
-
از سوئیچ 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- کامپایل کنید.
-
من کد شما رو بررسی کردم و تنها اشکالش همون اشتباه تایپی تابع main بود و مشکل دیگری نداره و خروجیش هم به این صورته:
6
2
3
4
5
البته توجه داشته باشید که include کردن فایل cpp روش صحیحی نیست و به جاش باید از فایل های هدر استفاده بشه. اگه مشکل تون حل نشد لطفا تمام فایلهای کد رو بصورت یک جا آپلود کنید و این رو هم بگید که برای کامپایل دقیقا دستور رو به چه شکلی وارد می کنید
فلگ l برای لینک کردن کاربرد داره. مثلا چنان چه از math.h (یا cmath در سی++) استفاده کنید باید به لینکر اعلام کنید که از این لایبرری استفاده کنه و برای این کار از -lm استفاده میشه. با توجه به اینکه در کد شما از هدر cmath استفاده نشده نیازی به این کار نیست.
-
همانطور که کاربر sd70 گفتند برنامه با اصلاح اشکال تایپی main مشکلی نداره
کامپایل و اجرا میشه
$ g++ code.cpp stack.cpp -o executable
$ ./executable
6
2
3
4
5
به پیوست بنگرید.
-
البته توجه داشته باشید که include کردن فایل cpp روش صحیحی نیست و به جاش باید از فایل های هدر استفاده بشه. اگه مشکل تون حل نشد لطفا تمام فایلهای کد رو بصورت یک جا آپلود کنید و این رو هم بگید که برای کامپایل دقیقا دستور رو به چه شکلی وارد می کنید
دقیقاً. باید از ماکرو ها برای گارد هدر هم استفاده کرد.
https://www.learncpp.com/cpp-tutorial/header-guards/ (https://www.learncpp.com/cpp-tutorial/header-guards/)
-
همانطور که کاربر sd70 گفتند برنامه با اصلاح اشکال تایپی main مشکلی نداره
کامپایل و اجرا میشه
$ g++ code.cpp stack.cpp -o executable
$ ./executable
6
2
3
4
5
به پیوست بنگرید.
پس مشکل از چیه؟ من پیوست شما رو دانلود و استخراج کردم. وقتی خواستم کامپایلش کنم باز هم همین ارور رو گرفتم
-
همانطور که کاربر sd70 گفتند برنامه با اصلاح اشکال تایپی main مشکلی نداره
کامپایل و اجرا میشه
$ g++ code.cpp stack.cpp -o executable
$ ./executable
6
2
3
4
5
به پیوست بنگرید.
پس مشکل از چیه؟ من پیوست شما رو دانلود و استخراج کردم. وقتی خواستم کامپایلش کنم باز هم همین ارور رو گرفتم
درون پوشه دستور زیر را اجرا کنید و خروجی را به صورت کامل قرار دهید.
ls
g++ code.cpp stack.cpp -o executable
-
درون پوشه دستور زیر را اجرا کنید و خروجی را به صورت کامل قرار دهید.
ls
g++ code.cpp stack.cpp -o executable
بالاخره کامپایل شد. ممنونم که وقت گذاشتید. فکر کنم توی include کردن iostream مشکلی مثل دوبار include کردن یا چیزی مشابه این بود. باز هم تشکر
-
پس یه (حل شد) به عنوان موضوع اضافه کنید.
-
درون پوشه دستور زیر را اجرا کنید و خروجی را به صورت کامل قرار دهید.
ls
g++ code.cpp stack.cpp -o executable
بالاخره کامپایل شد. ممنونم که وقت گذاشتید. فکر کنم توی include کردن iostream مشکلی مثل دوبار include کردن یا چیزی مشابه این بود. باز هم تشکر
من پست مربوط به گارد را به همین خاطر گذاشتم.
-
درون پوشه دستور زیر را اجرا کنید و خروجی را به صورت کامل قرار دهید.
ls
g++ code.cpp stack.cpp -o executable
بالاخره کامپایل شد. ممنونم که وقت گذاشتید. فکر کنم توی include کردن iostream مشکلی مثل دوبار include کردن یا چیزی مشابه این بود. باز هم تشکر
من پست مربوط به گارد را به همین خاطر گذاشتم.
متشکرم
-
پس یه (حل شد) به عنوان موضوع اضافه کنید.
اضافه کردم