PDA

View Full Version : ساخت کتابخانه استاتیک از پروژه های ++c با mingw32



mohsen10132
سه شنبه 22 فروردین 1391, 23:33 عصر
سلام دوستان عزیز.

حقیقتش من فوق العاده تازه وارد هستم در زمینه برنامه نویسی با زبان ++c . :افسرده:
راستش من یه سری فایل h. و یه سری هم فایل c. دارم که بعضی از سورس هام توی خودشون مثلا یه فایل h. دیگه رو اینکلود کرده .

محیط برنامه نویسی هم فعلا دارم با dev ++c کار میکنم چون نیاز دارم تا از جمیع این سورس هام یک کتابخونه استاتیک توسط mingw32 ی اون ایجاد کنم . ( توجه کنید حتما میخوام mingw32 باشه ) .

اما متاسفانه هیچ گونه راهنما و توضیح فارسی در رابطه با mingw32 گیر نیاوردم ، حالا درخواستی که از دوستان وارد و کارکشته این انجمن دارم اینه که اگر امکانش هست توضیح بدن چطوری با dev c++ و ابزار mingw32 ی اون میشه یک کتابخانه استاتیک ایجاد کرد .

با تشکر.

mohsen10132
چهارشنبه 23 فروردین 1391, 12:16 عصر
سلام مجدد.
حقیقتش من تا به حال توی فروم شما زیاد جستجو کردم و جهت رفع مشکلاتم از نقل و قول های کاربران عزیز زیاد استفاده کردم پس قصد ایجاد تاپیک الکی و تکراری نداشتم و ندارم ، اما باور کنید توی این زمینه ای که سوال کردم راهنمای فارسی کامل گیر نیاوردم . بدون اغراق بگم انجمنتون خیلی خوبه ، اما کم محلی کردن به پرسشهای تازه کاران به نظر من که جالب نیست .

حداقل اگر سوالم رو نفهمیدید یا براتون گنگ هست بگید بیشتر توضیح بدم . امیدوارم دوستان نظری هم به این تاپیک بیندازند.

با تشکر.
محسن.

rezaricky
چهارشنبه 23 فروردین 1391, 14:41 عصر
من با dev کار نکردم ولی
برای ایجاد کتابخانه استاتیک در mingw میتونی از این دستورات استفاده کنی (دستورها رو تو cmd تایپ کن)
>g++ -c add.cpp -o add.o
>ar rcs libadd.a add.o
این دستورات برات یک کتابخانه استاتیک با نام libadd.a میسازند
دقت کن که نام کتابخانه استاتیک حتما باید با lib شروع بشه مثل بالا

این لینک رو هم ببین :
http://www.codeproject.com/Articles/84461/MinGW-Static-and-Dynamic-Libraries

mohsen10132
چهارشنبه 23 فروردین 1391, 17:01 عصر
مرسی دوست عزیز بابت پاسخ . اگر پر رویی نباشه میتونم ازتون درخواست لینک دانلود mingw32 کنم ؟ میشه یه لینک از فایل های مورد نیازش قرار بدید.



>g++ -c add.cpp -o add.o
>ar rcs libadd.a add.o



راستی توی این مثال شما یه فایل cpp. رو به lib تبدیل کردید اما من میخوام چندین فایل c. رو تبدیل به lib. کنم . به نظرتون مشکلی پیش میاد ؟

:خجالت: یه سوال خیلی مبتدیانه دیگه هم دارم ، شرمنده دیگه . :خجالت:
ببینید به ازای هر فایل c. در کنارش یه فایل h. هم قرار داره که مخصوص خودشه حالا موقع استفاده از دستور add کدومشون رو باید اضافه کنم ؟

rezaricky
چهارشنبه 23 فروردین 1391, 22:57 عصر
بجای دانلود mingw بهتره code::blocks IDE رو دانلود کنی که خودش از mingw استفاده میکنه
http://sourceforge.net/projects/codeblocks.berlios/files/codeblocks-10.05mingw-setup.exe/download
کامپیلر هم تو محل نصب یه فولدر با نام mingw هست.

rezaricky
چهارشنبه 23 فروردین 1391, 23:07 عصر
ایجاد کتابخانه استاتیک و استفاده از اون در کامپایلر mingw :

4 تا فایل داریم : 2 فایل کتابخانه ، یک فایل هدر , و فایل اصلی برنامه
فایل fred.c
#include <stdio.h>
void fred(int arg)
{
printf("fred: we passed %d\n", arg);
}
فایل bill.c
#include <stdio.h>
void bill(char *arg)
{
printf("bill: we passed %s\n", arg);
}
فایل lib.h
void bill(char *);
void fred(int);

و فایل اصلی برنامه program.c
#include <stdlib.h>
#include "lib.h"

int main()
{
bill("Hello World");
exit(0);
}

ایجاد کتابخانه استاتیک :
برای کامپایل چندین فایل اونها رو با فاصله از هم جدا میکنیم

gcc -c bill.c fred.c
ar crv libfoo.a bill.o fred.o
ranlib libfoo.a

استفاده از کتابخانه در برنامه :

gcc -o program program.o libfoo.a
با این دستور فایل اجرایی تولید میشه و میتونی اجراش کنی

نکته : مجموعه کامپایلر mingw دارای کامپایلر جداگانه ای برای زبان های c وc++ هست، نام کامپایلر سی gcc و نام کامپایلر سی پلاس پلاس g++ هست.

mohsen10132
چهارشنبه 23 فروردین 1391, 23:11 عصر
دوست عزیز لطف میکنید تحت عنوان یک فایل ، همین مثال رو با فایل اجرایی bat. به جای cmd آپلود کنید ؟ سرعتم کمه و اون فایل حجیم ....
باور کنید من خیلی تازه کارم وگرنه اینقدر زحمت تون نمیدادم .:اشتباه:

rezaricky
چهارشنبه 23 فروردین 1391, 23:18 عصر
کامپایلر mingw رو میتونی در محل نصب dev C++‎ پیدا کنی

mohsen10132
چهارشنبه 23 فروردین 1391, 23:22 عصر
کجاش ؟ لطف میکنی آدرسشو بگی ؟

rezaricky
چهارشنبه 23 فروردین 1391, 23:33 عصر
محل نصب برنامه dev c، فولدر mingw و داخل اون فولدر bin

mohsen10132
چهارشنبه 23 فروردین 1391, 23:38 عصر
بعد اونوقت از توی این پوشه یه فایل ar رو بردارم دیگه چی ؟ منظورم اینه که اون gcc و g++ رو از کجا گیر بیارم ؟ کلا دو تا فایل اجرایی نیازه برای این کار ؟ g++ و ar ؟

rezaricky
چهارشنبه 23 فروردین 1391, 23:51 عصر
نیازی نیست این دو تا فایل رو برداری ، میتونی مسیر پوشه bin رو در متغیر PATH ویندوز وارد کنی .بعدش میتونی فایل های داخل فولدر bin رو هر کجا که خواستی استفاده کنی.
اگه نمیدونی متغیر PATH چیه ، سورس کد ها تو بریز داخل فولدر bin بعد دستورات رو وارد کن

mohsen10132
چهارشنبه 23 فروردین 1391, 23:55 عصر
آقا نمیشه که نمیشه ، فقط یه فایل 8 بایتی خالی برام ایجاد میکنه با پسوند a. :ناراحت:

rezaricky
پنج شنبه 24 فروردین 1391, 00:04 صبح
مثالی رو که برات زدم با کامپایلر mingw تست کردم ،هیچ مشکلی نداشت
مثال رو تونستی اجرا کنی؟

mohsen10132
پنج شنبه 24 فروردین 1391, 00:07 صبح
نه والا نه .... :گریه::گریه::گریه::گریه:
جون من یه سمپل بزار حسابی گیج شدم . واقعا شرمندتم .... :ناراحت:

rezaricky
پنج شنبه 24 فروردین 1391, 00:20 صبح
فایل های مثال رو برات میذارم ببین

mohsen10132
پنج شنبه 24 فروردین 1391, 00:26 صبح
داداش دمت گرم واسه تو هم فایل o. رو ایجاد کرده و هم a. رو ، من فقط اون دستوراتی رو گفتی میریختم توی یه فایل bat. و اجراشون میکردم البته به اضافه سورس ها و mingw امکانش هست واسه همین برا من کار نمیکنه ؟ چون الان دوباره تست کردم جواب نداد. حتما باید توی cmd بنویسم ؟

mohsen10132
پنج شنبه 24 فروردین 1391, 00:34 صبح
شد ، شد ، آخر درست شد واقعا ازت متشکرم درست شد ، نمیدونم چطوری ازت تشکر کنم .:بوس: :تشویق:

mohsen10132
پنج شنبه 24 فروردین 1391, 22:18 عصر
سلام دوباره دوست عزیز.
خوشبختانه با کمک و راهنمایی های شما تونستم کتابخونه رو تولید کنم ، اما هنگام اجرا نزدیک به 10 تا خطای مربوط به linker میده ، میخواستم بدونم میشه بگید علت بروز چنین خطاهایی چیه ؟