انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: Arman_gh در 05 امرداد 1386، 09:28 قظ
-
سلام دوستان هنگامی که میخواهم برنامه زیر را کامپایل کنم
#include <stdio.h> int main(){ printf("my name is arman"); return 0; }
با خطای زیر روبرو میشوم
1.c:1:19: error: stdio.h: No such file or directory 1.c: In function ‘main’: 1.c:3: warning: incompatible implicit declaration of built-in function ‘printf
’
راستی من با دستور زیر برنامه خودم را کامپایل میکنم
gcc 1.c -o 1
-
دوستان کسی نیست پاسخ من را بدهد؟
-
من همون رو کامپایل کردم مشکلی نبود البته به این صورت:
#include <stdio.h>
int main()
{
printf("my name is arman");
return 0;
}
-
چیزی که مشخصه اینه که هدر فایل stdio.h موجود نیست.
البته میتونید اون رو از جایی دیگه کپی و در پوشه /usr/include/و یا /usr/include/c++/ بریزید.
این کدها رو امتحان کن:
#include <cstdio>
using namespace std;
int main()
{
printf("my name is arman\n");
return 0;
}
کدها در سی پلاس هستند که میتونید در اون از سی استاندارد نیز استفاده کنید.
فایل رو با نام hello .cppذخیره کنید.
برای کامپایل هم:
g++ hello.cpp -o hello
برای اجراش هم:
./hello
-
من هم اوایل کار این مشکلات را داشتم. ولی حالا دیگه تمام بسته های سی و سی پلاس را نصب میکنم. هیچ مشکلی واسه کامپایل نیست.
این چند روز هم چند تا فایل هدر جدید EssyBMP و Magick گرفتم اونها هم راحت کامپایل شد.
-
دوستان یک سوال مهم دارم.
آیا امکان این وجود دارد که کدهایی که در محیط گنو/لینوکس نوشته ایم طوری کامپایل کرد که در
ویندوز نیز کارایی داشته باشد.
یعنی بشود آنها را در محیط سیستم عامل لینوکس برای ویندوز کامپایلف کرد؟
ترجیحا از کامپایلر گنو استفاده نمود!
-
دوستان یک سوال مهم دارم.
آیا امکان این وجود دارد که کدهایی که در محیط گنو/لینوکس نوشته ایم طوری کامپایل کرد که در
ویندوز نیز کارایی داشته باشد.
اگه کامپایلشون کنی 100٪ غیر ممکن هستش چون دو تا سیستم عامل 100٪ با هعم فرق دارن .اگه نداشتن که الان ویندوز و بقیه سیستم عامل ها اصلا وجود نداشتن .
اگه تو پایتون و پرل و یا زبان های اسکریپتی دیگه بنویسی با کمی تغییر در همه سیستم عامل ها قابل اجرا هستن . و باز به شرطی که کامپایل نشن مثلا از فایلهای پایتون رو ویندوز Exe درست نکنی
-
میشه ولی با لینوکس نه
یعنی کد رو طوری بنویسی که با چیزهایی مثل cygwin یا ++MSVC کامپایل بشه
البته چیزهایی مثل Net. این قابلیت رو دارند که روی چند سیستم عامل بدون تغییر اجرا شوند
-
امکان داره.
اگه از کد C استاندارد استفاده کنید. اینطوری کامپایلرها میتونن کامپایل کنن. یا اینکه با ابزاری مثل MinGW کامپایل کنید که همون gcc تحت ویندوزه ولی محدود.
-
متوجه سوال من نشدید !
من فقط خواستم طوری کامپایل بشه که تو ویندوز اجرا بشه و نه در هر دو سیستم.
یعنی تو لینوکس بنویسم و البته همونجا طوری کامپایل کنم که تو ویندوز اجرا بشه!
امیدوارم سوال مفهوم باشه :-X
-
می تونید از زبان برنامه نویسی پایتون استفاده کنید و خروجی exe داشته باشید .
-
من پایتون بلد نیستم :-[
-
کل سیستم عامل ویندوز عجغ وجغ هستش و دلم نمی خواد بیشتر از این فکرمو براش معطل کنم
-
امتحانش نکردم ولی میتونی از winegcc و ++wineg استفاده کنی این قابلیت رو دارن
-
دوستان مشکل دیگری در کامپایل برنامه های سی و سی پلاس هست:
--------------
یک واقعه عجیب
برنامه ساده زیر رو در نظر بگیرید:#include <iostream>
using namespace std;
int main ()
{
cout << " Hello! This is a console app." << endl;
return 0;
}
خوب حتما میفرمایید که بسیار ساده است و بسادگی هم باید کامپایل و اجرا بشه!
حالا نتیجه کامپایل رو ببینید:$ gcc hello.cpp -o hello
/tmp/cczclmyY.o: In function `__static_initialization_and_destruction_0(int, int)':
hello.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
/tmp/cczclmyY.o: In function `__tcf_0':
hello.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cczclmyY.o: In function `main':
hello.cpp:(.text+0x8e): undefined reference to `std::cout'
hello.cpp:(.text+0x93): 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*)'
hello.cpp:(.text+0x9b): 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> >&)'
hello.cpp:(.text+0xa3): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
hello.cpp:(.text+0xb2): undefined reference to `std::cout'
hello.cpp:(.text+0xb7): 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*)'
hello.cpp:(.text+0xbf): 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> >&)'
hello.cpp:(.text+0xc7): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
hello.cpp:(.text+0xd6): undefined reference to `std::cout'
hello.cpp:(.text+0xdb): 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*)'
hello.cpp:(.text+0xe3): 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> >&)'
hello.cpp:(.text+0xeb): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/cczclmyY.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
البته وقتی هم که از دستور cc hello.cpp -o hello هم استفاده کردم نتیجه مشابهی گرفتم، ولی از همه عجیبتر اینه که وقتی اون رو با دستور زیر کامپایل کردم:$ g++ hello.cpp -o hello
$ ./hello
Hello! This is a console app.
به خوبی کامپایل و اجرا شد. :o
کسی توجیحی برای این مورد داره!؟
-
gcc کامپایلر c هست و ++g کامپایلر ++C و برنامی های که شما نوشتین هم ++C هست ;-)
-
همانطور که در بالا گفتند ++g کامپایلر ++c هست البته شما میتونید باهاش برنامههای c را هم کامپایل کنید .
یه نکته دیگه هم اینکه اگه پسوند فایل شما cpp و کد داخلش C باشه نمیتونید با gcc اون رو کامپایل کنید . باید حتما پسوندها رعایت بشه ! :)
-
دوست عزیز ممنون از پاسختون ولی باید عرض کنم این مشکل بصورت عمومی هست،
یعنی من تمام فرمایشات شما رو انجام دادم(قبل از این) ولی همچنان مشکل برقرار بود.
بنابراین تصمیم گرفتم توانجمن مطرح کنم.
ضمن اینکه من با g++ کئهای سی و سی پلاس هر دو رو کامپال می کنم.
ولی در هر دو مورد بالا نمیتونم از ccیا gccاستفاده کنم.
همینطور من همیشه پسوند مناسب رو رعایت میکنم ولی همواره این مشکل رو دارم.
ممنون از پاسختون ولی مشکل من حل نشد! :'(
-
همان طور که دوستان گفتند gcc به هیچ وجه کد ++C رو کمپایل نمیکنه حتی اگر پسوندش cpp و cxx و ... باشه