Home / راهنمای ایجاد یک کتابخانه پویا در لینوکس برای gcc

راهنمای ایجاد یک کتابخانه پویا در لینوکس برای gcc


http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

How to generate a shared object: (Dynamically linked object library file.) Note that this is a two step process.

  1. Create object code
  2. Create library
  3. Optional: create default version using a symbolic link.
اول یک آبجکت می سازیم
کتابخانه را می سازیم
یک نسخه پیشفرض با ایجاد یک لینک میانبر از یک نسخه از کتابخانه میسازیم
مرحله سوم اختیاری است

مرحله اول ساخت یک آبجکت
gcc -Wall -fPIC -c *.c
مرحله دوم سایت یک کتابخانه
gcc -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0   *.o

مرحله سوم ایجاد نسخه پیشرفض
ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so.1
ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so
چند مرحله لینک دادن نیز مورد قبول است
مثلا
ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so.1
ln -sf /opt/lib/libctest.so.1   /opt/lib/libctest.so

در اینجا چند پارامتر استفاده شده است که در ادامه میآید
  • -fPIC: Compiler directive to output position independent code, a characteristic required by shared libraries. Also see "-fpic".
  • از هر فایل منبع به صورت مجزا به فایلی مستقل با نام خودش  و تنها پسوند 0  ایجاد میشود
  • این پارامتر برای ایجاد کتابخانه های اشتراکی خیلی مهم است.
  • -shared: Produce a shared object which can then be linked with other objects to form an executable.
  • یک آبجکت اشتراکی از شی را ایجاد می کند که اجازه می دهد بعدا به سایر آبجکت ها هنگام ایجاد نسخه اجرایی برنامه متصل شود
  • -Wl,options: Pass options to linker. 
  • پارامتر های بعد از کاما را به برنامه 
  • linker 
  • در کامپایلر بفرست
  • In this example the options to be passed on to the linker are: "-soname libctest.so.1". The name passed with the "-o" option is passed to gcc.
  • در این مثال پارامتر های بعد از کاما اینها هستند
  • "-soname libctest.so.1"
  • این نامی است که با پارامتر 
  • -o 
  • به جی سی سی ارسال می شود.
  • Option -o: Output of operation. In this case the name of the shared object to be output will be "libctest.so.1.0"
  • و پارامتر 
  • -o
  • که خروجی عملیات ماست. در این مثال نام آبجکت اشتراکی ما میبایست خروجی بگیریم عبارت است از:
  • "libctest.so.1.0"

کامپایل کردن برنامه با استفاده همراه با آدرس دهی  کتابخانه ها و 
فایل های سرايند
 gcc -Wall -I/path/to/include-files -L/path/to/libraries prog.c -lctest -o prog
Use:
    gcc -Wall -L/opt/lib prog.c -lctest -o prog
در مثال بالا ما از کتابخانه اشتراکی که ایجاد کرده بودیم در ایجاد برنامه 
prog 
استفاده کردیم
دلیل ایجاد لینک های میانبر در هنگام ایجاد  کتابخانه اشتراکی این است
چرا که اگر آن را با نام اصلی خود که در انتها عدد یک داشت رها می کردیم برنامه لینک دهنده موجود در کامپایلر نمی توانست آن را بیابد
Where the name of the library is libctest.so. (This is why you must create the symbolic links or you will get the error "/usr/bin/ld: cannot find -lctest".) 
The libraries will NOT be included in the executable but will be dynamically linked during runtime execution.
اجرای برنامه

Run Program:

  • Set path: export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH
  • Run: prog



     RSS of this page