Как создать библиотеку в C? - PullRequest
0 голосов
/ 21 июня 2020

Я работаю над программой, использующей libgit2. Я сохранил код в одном файле c. Скажите:

somefile. c

Я компилирую и использую его. Теперь я хочу выделить некоторые детали, связанные с libgit2, в отдельную библиотеку внутри проекта. Итак, я создал h-файл со структурами данных, которые мне нужны, и определениями функций, которые я хочу использовать. Пока ничего особенного: инициализация, передача пути к репо и sa treei sh ... это константа * константа .... затем в файле библиотеки c у меня есть реализация функций в файл .h.

В настоящее время макет выглядит следующим образом:

include/mylib.c
include/mylib.h
somefile.c

В include/mylib.h у меня есть одна структура и пара функций:

struct blah {} blah_info;

int blah_init(cont char * path, const char * treeish);

int blah_shutdown();

В include / mylib. c Я включаю mylib.h:

#include "mylib.h" # notice that I don't have to use "include" in the path

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

В somefile.c теперь я включаю файл библиотеки c, а не файл .h (и больше не нужно включать git2.h, как это делается сейчас в файлах mylib) .

#include "include/mylib.c"

И это позволяет мне скомпилировать и запустить программу, как это было до того, как я разделил ее на части но Я знаю, что можно включить include/mylib.h из оригинала . c файл. Я думаю, что перед компиляцией окончательной программы необходимо собрать библиотеку? Какие шаги необходимы для этого?

Прямо сейчас я компилирую вручную в сценарии оболочки, вызывая G CC за один раз ... так что, если мне нужно выполнить больше команд для этого, просто дайте мне знать, чтобы я добавил их в скрипт.

Ответы [ 2 ]

2 голосов
/ 21 июня 2020

В somefile.c вам нужно сделать следующее:

#include "include/mylib.h"

И убедитесь, что вы определили эти функции в mylib.c:

int blah_init(cont char * path, const char * treeish) {

}

int blah_shutdown() {

}

А затем объявите их в mylib.h:

struct blah {} blah_info;

int blah_init(cont char * path, const char * treeish);

int blah_shutdown();

И при компиляции включите оба somefile.c и mylib.c как входные файлы.

0 голосов
/ 21 июня 2020

# директива include используется для вставки содержимого файла в другое место и в основном используется для включения заголовков, чтобы компилятор знал, что к чему (типы, константы и т. Д. c), а затем компоновщик помещает все скомпилированные файлы в один исполняемый файл . чтобы убедиться, что заголовок включен только один раз в один файл, вы используете так называемую условную компиляцию, это делается с помощью препроцессора (перед компиляцией)

yourlib.h

#ifndef YOUR_LIB_H_ //there are many naming conventions but I prefer this one
#define YOUR_LIB_H_

//all your declarations go here

#endif //YOUR_LIB_H_
//you should put in comment what's that condition for after every endif

теперь в yourlib. c вы включаете этот заголовок, а затем пишете свои определения

#include "yourlib.h"

//all your definitions go here

и то же самое для вашего основного файла, просто включаете заголовок, и компилятор знает, что делать

#include "yourlib.h"

//your code goes here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...