PDA

نسخه کامل مشاهده نسخه کامل : Shared Libraries



Ali_RNT
13-11-2015, 15:16
درود.

من برای برنامه ای که نوشتم یه کتابخونه درست کردم که میخوام به صورت Shared استفاده کنم. کسی میتونه یه مقدار درمورد این نوع کتابخونه ها و پیاده سازیشون با C++ توضیح بده؟

نمیدونم چرا تا حالا هیچ کدوم از سوالام تو بخش برنامه نویسی جواب نگرفتن :| لطفا اینبار منو بی جواب نذارید.

با سپاس :)

god of war 2
13-11-2015, 17:37
کلا پیاده سازی کتابخونه ها در ظاهر سادس ولی حقیقت اینه که جزئیات زیادی داره که بعدا در حین کار به اون جزئیات مواجه میشید.
یه توضیح مختصر راجب کتابخونه ها برای شروع کار :
در کل Shared libraries در هر سیستم عاملی با پسوند های مختلف (so. , .dll, .dylib) قابل ایجاد شدن هستن و تقریبا ساختار کلی مشابهی دارند ولی جزئیات کار کمی تفاوت داره. کتابخانه های shared در زمان اجرا (run-time) بارگزاری و استفاده میشن بر عکس نوع static که تمام عملیات لینک در زمان کامپایل (compile-Time) انجام میشه. معمولا برنامه نویس بر پایه یکسری پارامتر ها تصمیم میگیره که کدشو در قالب کدوم نوع (shared یا static) گسترش بده مثلا یکی از این پارامتر ها اینه که چه تعداد برنامه قراره از این کد استفاده کنه. اگر قراره این کتابخانه تنها در یک برنامه استفاده بشه نوع static توصیه میشه که دردسر های shared رو نداره و از نظر performance هم بهتر عمل میکنه چون نیازی به بارگزاری در زمان اجرا نداره. اگر استفاده کننده ها بیشتر از یکی هستند طبیعتا نوع shared بهتره به این دلیل که از تکرار کد بینه تمام استفاده کننده ها جلوگیری میشه.
پارامتر دیگه میتونه ساختار برنامه باشه, مثلا برنامه هایی هستند که از سیستم plugin پشتیبانی میکنن و shared library ها میتونن به عنوان plugin تحت یک interface معین استفاده بشن و اینکار توسط نوع static قابل پیاده سازی نیست.
پارامتر دیگه ایی که برای برنامه های open source مهمه نوع لایسنس هست مثلا برنامه هایی که تحت لایسنس LGPL منتشر میشن بهتره که در حالت shared استفاده بشن به این دلیل که استفاده کننده از نظر لایسنس آزادی عمل بیشتری براش فراهم بشه.
اما اگراز نظر فنی بخوایم بررسی کنیم shared library ها پیاده سازیشون جزئیات بیشتریو میطلبه که اگه رعایت نشن ممکنه بعدا مشکل ساز بشه. به عنوان مثال بعضی از کلاس های STL مثل map ها معمولا وقتی بصورت عمومی در dll تعریف بشن مشکل ایجاد میکنن.
مورد دیگه اینکه shared library ها بر خلاف نوع static نیاز به یکسری کد اضافه داره که مروبط میشه به اینکه چه توابع و کلاسهایی داخل dll قرار بگیرن بصورت عمومی و چه مواردی پنهان بشن که خود این مبحث خیلی مهمه. و...
اگه اول کاری که میخواید انجام بدید + سیستم عامل + کامپایلرتون رو بگید بهتر و بیشتر میشه راهنمایی کرد.

Ali_RNT
13-11-2015, 18:06
سپاس از توضیحاتتون.

یه برنامه ایجاد فلش بوتیبل میخوام بسازم. برای لینوکس و مشخصا با کامپایلر ++G

god of war 2
13-11-2015, 18:57
از این ماکرو میتونید استفاده کنید که در هر دو سیستم عامل windows و linux قابل استفاده هست.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

نحوه استفاده:
در داخل فایل header قبل از هر تابعی که میخواهید داخل کتابخانه قابل استفاده باشه FUNC_EXPORT رو قرار میدید به شکل زیر

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و در نهایت برای کامپایل و تست از لینک زیر کمک بگیرید.:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]