С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

как написать свою библиотеку функций? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти 1+2+3+...+n рекурсивно и итеративно http://www.cyberforum.ru/cpp-beginners/thread162583.html
Уважаемые программисты!!! помогите разобраться, дали задачу. Найти 1+2+3+...+n. Первый способ, решить рекурсивно, а второй не рекурсивно. Чем текст программ будет различаться???
C++ n>=a в степени k вот решил задачу таким образом: задача: Напишите программу, находящую для заданных числел n и k максимальное число a, такое, что ak≤ n решение: #include <iostream> #include <cmath> using... http://www.cyberforum.ru/cpp-beginners/thread162564.html
Найти сумму элементов массива, которые больше своих "соседей" справа и слева C++
В массиве из N элементов найти сумму тех элементов, которые больше своих "соседей" справа и слева.
C++ OpenMP, создание потоков
В инете нашел много примеров по распараллеливание циклов, но никак не могу понять, как просто написать чтобы конкретная функция выполнялась в отдельном потоке? int main() { #pragma omp parallel...
C++ Класс комплексных чисел http://www.cyberforum.ru/cpp-beginners/thread162537.html
Ребят, помогите пожалуйста написать класс комплексных чисел... Я плохо разбираюсь в объектно-ориентированном программировании, учусь, покажите плиз!
C++ Программа работы с дробями (консоль) Десятичные дроби. Нужно чтобы программа умела: делить, умножать, складывать и вычитать и построена обязательно на классах, код не мой и разобраться в нём довольно трудно, плюс "консоль" что не мой... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18381 / 6429 / 441
Регистрация: 30.03.2009
Сообщений: 17,845
Записей в блоге: 28
31.08.2010, 15:06
Сразу говорю, что пример писал в воздухе, а потому могут быть опечатки и неточности

Библиотека в конечном итоге представляет из себя бинарник с кодами плюс набор интерфейсных файлов *.h, чтобы компилятор знал, как обращаться к функциям из библиотеки.

Пример для самого простого случая. Библиотека будет называться shaman и содержать функции func1 и func2. В отдельном каталоге создаём исходники:

C
1
2
3
4
5
6
7
/* Файл shaman1.c */
#include "shaman.h"
 
void
func1 (void)
{
}
C
1
2
3
4
5
6
7
/* Файл shaman2.c */
#include "shaman.h"
 
void
func2 (void)
{
}
C
1
2
3
4
5
6
7
8
9
10
11
/* Файл shaman.h */
#ifndef __SHAMAN_H__
#define __SHAMAN_H__
 
extern void
func1 (void);
 
extern void
func2 (void);
 
#endif /* __SHAMAN_H__ */
Теперь компилим всё это дело

Код
$ gcc shaman1.c -c -o shaman1.o
$ gcc shaman2.c -c -o shaman2.o
$ ar cr libshaman.a shaman1.o shaman2.o
В конечном итоге мы получим файл libshaman.a Это так называемая статическая библиотека. Бывают ещё и динамические библиотеки, но для начала тебе хватит и статической. Имя бинарника библиотеки должно начинаться на "lib". Кстати, можно зайти в mc и на файле libshaman.a нажать Enter. В итоге ты зайдёшь во внутренности библиотеки. Статическая библиотека представляет собой аналог обычного архива *.rar, только без компрессии плюс некоторые другие вещи

Чтобы далее эту библиотеку использовать, тебе надо куда-то скопировать файлы libshaman.a (бинарные коды функций func1 и func2) и файл shaman.h (интерфейсный файл нашей библиотеки). Создадим каталог /home/user/libshaman и скопируем туда эти два файла

Теперь создадим простенький тест, который будет использовать эту библиотеку:

C
1
2
3
4
5
6
7
8
9
10
/* Файл prog.c */
#include "shaman.h"
 
int
main (void)
{
  func1();
  func2();
  return 0;
}
и компилируем

Код
$ gcc prog.c -I/home/user/libshaman -L/home/user/libshaman -lshaman
Опция -I... задаёт пути для поиска нестандартных инклюдов, опция -L... задаёт пути поиска нестандартных библиотек, опция -l... подключает библиотеку. При этом если опция -lqqq, то будет искаться файл с именем libqqq (именно поэтому имена библиотек должны начинаться на "lib")
4
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.