الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البرمجة بلغة سي تحت لينكس

مغلق
بدأه هدى بدر الدين في 19 ديسمبر 2005 · 16 رد · 1,930 مشاهدة · في نظام تشغيل Unix & Linux
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته :

لدي سؤال حول البرمجة بلغة سي تحت لينكس وأنا هنا استعمل توزيعة فيدورا كور3 والسؤال يتعلق بالملفات الرئسية والدوال القياسية .

عندما كتبت البرنامج التالي والذي بالتأكيد لا يعطي أخطاء اذا كتبته في كومبايلر السي في الوندز :

#include<stdio.h>
#include<math.h>
int main()
 {
	float x=1.7;
	printf("The approx of 1.7 is %f\n",floor(x));
	return 0;
}

المشكلة هنا ان هذا البرنامج يعطي الخطأ التالي :

/tmp/ccqCGKqO.o(.text+0x35): In function `main':
: undefined reference to `floor'
collect2: ld returned 1 exit status

فكرت في أن الخطأ في الدالة التي استعملتها تكون غير موجودة في المكتبة الرياضية استعملت اغلب الدوال التي أعرفها ونفس النتيجة باختلاف اسم الدالة .

وأريد منكم فقط توضيح سبب هذا الخطأ لي وهل التعامل مع الملفات الرأسية يختلف في لينكس عنه في وندوز .

ولكم شكري

#2

تقريباً لو غيرت اسمها الى cmath ستعمل

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#3

أوكي هذا بالنسبة للمكتبة الرياضية لكن المشكلة بتصير حتى مع مكتبات أخرى مثل مكتبة SDL الخاصة ببرمجة الفيديو و الألعاب

#4

والله يا أختى الكريمة أنا لا أبرمج بال c

المهم أننى ترجمت البرنامج المذكور باستخدام كومبيلر ال C++ ولم يعطنى أى خطأ

ahmed@linux:~> g++  a.c -o  a
a.c:8:2: warning: no newline at end of file
ahmed@linux:~> ./a
The approx of 1.7 is 1.000000
ahmed@linux:~>

أنا وضع الكود الذى ذكرتيه فى اﻷأعلى فى ملف وسميته a.c

تم تعديل هذه المشاركة بواسطة Arab Penguin في 19 ديسمبر 2005 في 21:22

#5

و الله يا أخي المشكلة تحدث عندي كلما أحاول استعمال الملفات الرأسية وما عرفتلها حل كل دالة استعملها تعطي سطر خطأ والمشكلة انه لا يعترض على اسم الملف الرأسي أي أنه موجود .

بس ياريت تقول لي أي توزيعة تستعمل هل تتوقع المشكلة من التوزيعة

شكرا

#6

لا أعتقد أن المشكلة من التوزيعة

أنا أستخدم سوزى 10 واعتقد ان GCC 4 هو المركب عليها .

بس لى ملحوظة تانية وهى أن Gcc يحتاج الى تعلمه ومعرفه كل أوامره قبل كل شىء .

وكما ذكرت لكى فإنى لا أبرمج بالC و أعتقد لو أستخدمتى برنامج مساعد مثل Anjuta يكون أفضل .

أو تخلى الملف .cpp وتعملى compile ب g++ زى ما وضحت فى المشاركة السابقة .

#7

السلام عليكم

اقتباس
بس ياريت تقول لي أي توزيعة تستعمل هل تتوقع المشكلة من التوزيعة

ليس للأمر علاقة بالتوزيعة المستخدمة أو نسخة GCC

نفذي اﻷمرين

gcc -lm file_name.c
./a.out

و إن شاء الله سيعمل بدون مشاكل :)

بالتوفيق

MPSI/MP* - CPR Tanger

#8

والله مشكورين على الاهتمام والرد :

بالنسبة للأخ Arab Penguin انه هل يجب دائما ان استعمل g++ بدلا من استعمال gcc اعني انه كل الدوال تقريبا التي حاولت استعمالها باستثناء دوال السلاسل ودوال الدخل والخرج القياسية كانت تعطي نفس النتيجة :

أي خطأ ومعه رقم ورسالة بأان الدالة غير معرفة لكل دالة موجودة في البرنامج .هل المشكلة ان هذه الدوال تعمل هنا فقط مع g++ كيف وهي دوال c ومن المفترض ان تعمل ايضا مع مترجمات c .

وبالنسبة للأخ caballero ياريت بس توضحلي معنى الخيار -lm أوياريت لو ممكن تفيدني أو تدلني على موقع أو كتاب يشرح لي برنامج gcc وg++ والخيارات المستعملة معها .

ولكم مرة أخرى جزيل الشكر والعرفان والتقدير .

#10

السلام عليكم ورحمة الله وبركاته

لدي سؤال متعلق بالمكتبة SDL و الخاصة ببرمجة الألعاب تحت لينكس .

لقد تحصلت على كتاب اسمه Programming+Linux+Games وحاولت تنفيذ البرنامج التالي من الكتاب والذي حفظته باسم sdltest.c :

#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
SDL_Surface *screen;
/* Initialize SDL's video system and check for errors */
if (SDL_Init(SDL_INIT_VIDEO) != 0)
 {
printf("Unable to initialize SDL: %s\n", SDL_GetError());
return 1;
 }
/* Make sure SDL_Quit gets called when the program exits! */
atexit(SDL_Quit);
/* Attempt to set a 640x480 hicolor video mode */
screen = SDL_SetVideoMode(640, 480, 16, SDL_FULLSCREEN);
if (screen == NULL) 
{
printf("Unable to set video mode: %s\n", SDL_GetError());
return 1;
}
/* If we got this far, everything worked */
printf("Success!\n");
return 0;
}

وكما هو مكتوب في الكتاب نفذت البرنامج باستعمال الأمر :

$ gcc sdltest.c -o sdltest 'sdl-config --cflags –libs'

ولكن البرنامج يعطي الخطأ التالي :

gcc: sdl-config: No such file or directory
cc1: error: unrecognized command line option "-fcflags"
cc1: error: unrecognized command line option "-flibs

"

حاولت تنفيذ البرنامج بدون أي خيارات أي :

$ gcc sdltest.c -o sdltest

و اصبح البرنامج يعطي الخطأ كالتالي :

/tmp/ccUFGlSG.o(.text+0x22): In function `main':
: undefined reference to `SDL_Init'
/tmp/ccUFGlSG.o(.text+0x34): In function `main':
: undefined reference to `SDL_GetError'
/tmp/ccUFGlSG.o(.text+0x56): In function `main':
: undefined reference to `SDL_Quit'
/tmp/ccUFGlSG.o(.text+0x74): In function `main':
: undefined reference to `SDL_SetVideoMode'
/tmp/ccUFGlSG.o(.text+0x8b): In function `main':
: undefined reference to `SDL_GetError'
collect2: ld returned 1 exit status

مع العلم ان الباكج الخاص بالـ SDL منصبة والملف الرأسي :

#include <SDL/SDL.h>

هو موجود فعلا .

لهذا اتمنى منكم مساعدتي وتوضيح معنى هذه الأخطاء وكيف يمكنني تجنبها ويا ريت بسرعة شوي لان مطلوب مني برنامج كبير شوي هو مشغل mpeg درست كل الدوال المطلوبة ونظريا قدرت اسوي فيه شغل كبير لكن للأسف لا البرنامج اللي انا كتبته تنفذ ولا أي برنامج آخر تحصلت عليه من النت يستعمل نفس المكتبة تنفذ كلها تعطي نفس الشكل من الأخطاء , علما بان التوزيعة التي استعملها هي توزيعة فيدورا كور 3 في البداية ظنيت ان المشكلة في نسخة gcc اللي استعملها لاني كتبت برامج عادية وتستدعي مكتبات رياضية عطت أخطاء مشابهة لكن لما في المنتدى اقترحتو عليا استعمل g++ بدلا من gcc البرامج اللي تستعمل المكتبة الرياضية تنفذت ولكن الأمر لم يحل بالنسبة للبرامج التي تستعمل مكتبة SDL .

وأكرر شكري دوما واتمنى اما مساعدتي أو إعطائي مكان أقدر اتحصل منه على المعلومات التي أريدها .

Programming_Linux_Games.pdf

#11

اعتقد ان الخطا في

<include <SDL/SDL.h#

وبالتحديد في

SDL/SDL.h

اعقتد انه يجب ان تكتبي

<include <SDL.h#

#12

شكرا اخي CPU على المساعدة لكن والله جربت أكتب السطر بالشكل :

#include <SDL.h>

و ما زال الخطأ مستمر

ومن جديد أرجو المساعدة من الجميع

#13

يا ريت الأخوة يجربوا ينفذوا البرنامج عندهم ويقولولي شو طلع ناتج التنفيذ علما انني نصبت الباكج التالية لاستطيع تنفيذ البرنامج وهي :

smpeg-0.4.4-0.1.fc3.rf.i386

smpeg-0.4.4-0.1.fc3.rf.i386

SDL-1.2.9-1.i386

SDL-devel-1.2.9-1.i386

ويا يت يقولولي النتيجة عندهم ومشكورين

#14

الخطأ ليس من الكود ولكن الاخطاء في امر الكومبايل

هذا يعني اسم ملف:

'sdl-config --cflags –libs'

وهذا يعني تنفيذ المحتوى:

`sdl-config --cflags –libs`

وبالتالي ظهرت الجملة ""gcc: sdl-config: No such file or directory" ولم يستطع تنفيذ الامر sdl-config

والخطأ الاخر خاص بال Options واللي نتج عنه:

cc1: error: unrecognized command line option "-fcflags"

cc1: error: unrecognized command line option "-flibs

ممكن تنفذي الامر sdl-config وحده على الشيل ليظهر ال Options الخاصة به:

[root@w ~]# sdl-config
Usage: sdl-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs] [--static-libs]

طبعا اكيد وضحت ال Options اللي كانت مكتوبه غلط

والصورة النهائية الان:

[root@w ~]# gcc -g -o sdltest sdltest.c `sdl-config --cflags --libs`
[root@w ~]# ./sdltest
Success!

انصحك بمراجعة ال Tutorials موجوده على http://www.libsdl.org/tutorials.php

و Articles على http://www.libsdl.org/articles.php

There's no place

like 127.0.0.1

#15

مشكور أخي Net Spider علة الاهتمام وسأحاول ان اجرب هذه الطريقة .

بس لو مافيهاش ثقلة دم ياريت تشرحلي الموضوع أكثر شوي

#16

قصدك اعيد شرح ردي السابق؟

هو المفروض ان الشرح مباشر ... على العموم جربي مرة اخرى واذا فيه مشاكل .. انا في الخدمة على اد ما اقدر

There's no place

like 127.0.0.1

#17

السلام عليكم

مشكور يأخي على الدرس الجميل

أريد ان اضيف ملفين الى المكتبة include

ولكن عندما أقوم بعمل copy و past للملف في المكتبة تأتي رسالة تقول access refused

و الملفين هما windows.h و winsock.h و الملفين ضرورين في عملية الترجمة

اثناء عملية الترجمة تحدث أخطاء بسبب عدم وجود الملفين

ما هو الحل في رأيكم المرجوا المساعدة يا أهل الخبرة

على فكرة يا أخي Net Spider أنا قرت موضوع لك عن طرق التسلل لسرفرات مع العلم انني اسفدت الكثير من الموضوع لكن

العقبة الكبيرة اللتي وقفت امامي هي ترجمة الثغراث لكترة الأخطاء فيها بالنسبة لثغرات ال IIS واللتي تحتوي على الملفين windows.h و winsock.h وأرجو ان تفيدني بخبرتك في هدا المجال ان شئت

مع تحياتي و فائق تقديري

اخوكم معاد

هذا الموضوع مغلق.

مواضيع مشابهة