Есть два способа загрузки разделяемых объектов C++
Для любого из этих методов вы всегда нужен файл заголовка для объекта, который вы хотите использовать. Заголовок будет содержать определения классов или объектов, которые вы хотите использовать в своем коде.
Статически:
#include "blah.h"
int main()
{
ClassFromBlah a;
a.DoSomething();
}
gcc yourfile.cpp -lblah
Динамически (в Linux):
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
double (*cosine)(double);
char *error;
handle = dlopen ("libm.so", RTLD_LAZY);
if (!handle) {
fprintf (stderr, "%s\n", dlerror());
exit(1);
}
dlerror(); /* Clear any existing error */
cosine = dlsym(handle, "cos");
if ((error = dlerror()) != NULL) {
fprintf (stderr, "%s\n", error);
exit(1);
}
printf ("%f\n", (*cosine)(2.0));
dlclose(handle);
return 0;
}
* похищенным из dlopen Linux man page Процесс под окнами или любая другая платформа та же, просто замените dlopen с версией платформы поиска динамического символа.
Для динамического метода работы все символы, которые вы хотите импортировать/экспортировать, должны иметь внешнюю ссылку C.
Есть некоторые слова Here о том, когда использовать статические и когда использовать динамическое связывание.
Возможно, я запутался, но вы не похожи на то, что у вас там достаточно информации. Что, например, содержит blah.so? Вы уверены, что не просто говорите об использовании ссылки? – Goz
Что вы подразумеваете под «общим»? – Klaim
Err ... поэтому файлы не являются файлами кода, не так ли? Возможно, вы хотите получить объект из a.так что (совместно используемая библиотека)? – Klaim