Кітапхананы құру


"кітапханаға орналасқан" және "кез келген бір кітапханада ізделініп жатыр" типті фразалар жиі қолданылады, бірақ мұның C++ программасында мәні қандай? Өкінішке орай бұл сұраққа жауап қандай операциялық жүйе қолданылып отырғанына тәуелді; бұл тарауда UNIX операциялық жүйесінің 8-ші нұсқасында кітапхананы құруды қарастырамыз. Басқа операциялық жүйелер аналогтық мүмкіндіктерін қарастырады. Кітапхана өзінің негізінде сәйкес .c файлдар жиынының компиляциялау нәтижесінде алынған .o файлдар жиыны болып табылады.  Әдетте, .o файлдарды қалай пайдалану керектігі туралы мағлұматы бар  бір немесе бірнеше .h файлдар болады. Мысал ретінде, келесі жағдайды қарастырайық, кейбір анықталмаған қолданушылар жиынына бізге математикалық функциялар тобын беру керек болсын. Тақырыптық файл келесідей :

extern double sqrt(double);        // жиынүсті

extern double sin(double);

extern double cos(double);

extern double exp(double);

extern double log(double);

бұл функциялардың анықтамалары сәйкес файлдарда сақталған sqrt.c, sin.c, cos.c, exp.c и log.c.

math.h атты кітапхананы құруға болады, мысалы:

$ CC -c sqrt.c sin.c cos.c exp.c log.c

$ ar cr math.a sqrt.o sin.o cos.o exp.o log.o

$ ranlib math.a

Бірінші шығатын файлдар өздеріне эквивалентті обьектілік файлдарға компиляцияланады. Содан кейін math.a. атты архив құру үшін ar командасы қолданылады. Аяғында архив  рұқсатты жылдамдату үшін индекстеледі.

Енді .o файлына қарағанда math.a файлының артықшылығы қандай екенін қарастырамыз, мысалы:

$ CC myprog.c sqrt.o sin.o cos.o exp.o log.o

Көптеген программалар үшін .o файлдарының дұрыс тобын анықтау оңай емес. Жоғарыда келтірілген мысалда олардың барлығы қосылған, бірақ егер функциялар myprog.c –да тек қана sqrt() және cos() функцияларын шақырса, онда бұл жеткіліксіз болады.

 $ CC myprog.c sqrt.o cos.o

Бірақ бұл олай емес, cos.c  sin.c-ны қолданғандықтан.

.a файлын өңдеу үшін СС командасымен шақырылған компоновщик файлдарды құру үшін қолданылған жиындағы сияқты тек қажетті .o файлдарды архивтан шығаруды біледі.Басқа сөзбен айтқанда,  кітапхананы қолдана отырып бір аттың (имени) көмегімен көптеген анықтамаларды қосуға болады, және, сонымен қатар, нәтижесінде программаға анықтамалардың минималды санын қосуды қамтамасыз етеді.