Библиотека не имеет места в памяти сама по себе, так как это не запущенный процесс.Концепция общей библиотеки состоит в том, чтобы иметь общую копию инструкций кода, но не каких-либо данных, используемых или генерируемых этим кодом.
, например, если ваша библиотека предназначена для управления динамически распределенной структурой:
object.h
struct object_struct {
char *name;
int foo;
int bar;
};
typedef struct object_struct * object_t; /* opaque pointer */
object_t new_object (char *name, int foo, int bar);
void delete_object(object_t);
int dump_object(object_t);
object.c
#include <stdio.h>
#include "object.h"
object_t new_object (char *_name, int foo, int bar) {
object_t _p = malloc(sizeof(object_t);
if (!_p)
return NULL;
_p->foo = foo; _p->bar = bar;
_p->name = strdup(_name);
return _p;
}
void delete_object(object_t p) {
if(_p->name)
free(_p->name);
if(_p)
free(_p);
}
int dump_object(object_t p) {
FILE * fp = fopen(p->name, "w");
if ( !fp )
return -1;
fprintf(fp, "foo: %d\nbar: %d\n", p->foo, p->bar);
fclose(fp);
return 0;
}
И у вас есть две программы consumer1.c и consumer2.c, которые используют этот объект библиотеки, как показано ниже:
consumer1.c
#include "object.h"
int main() {
object_t o = new_object("consumer1.txt", 1, 2);
dump_object(o);
delete_object(o);
return 0;
}
consumer2.c
#include "object.h"
int main() {
object_t o = new_object("consumer2.txt", 1, 2);
dump_object(o);
delete_object(o);
return 0;
}
для всех намерений и целей, эти две программы библиотеки объектов НЕ БУДУТ иметь общих данных или общей памяти или общего пространства.
PS: при условии, что gcc и gnu make, вот файл make для васпроверить все это.
Makefile
default: libobject.a consumer1 consumer2
.c.o: %.c
$(CC) -c -o $@ $<
libobject.a: object.o
$(AR) r $@ object.o
object.o: object.c object.h
consumer1 consumer2: $@.o libobject.a
$(CC) -o $@ $@.o -L. -lobject
PPS: это просто руководство!Я не проверял код здесь ВСЕ, надеюсь, он все работает без проблем, однако, возьмите его с крошечным солью, и если я допустил синтаксическую ошибку, пожалуйста, исправьте соответствующим образом.