Cómo llamar a una biblioteca de enlaces dinámicos hecha en C en lenguaje C
Enlazar archivo de encabezado de biblioteca:
head.h
clase A
{
público: p>
p>
A();
virtual ~A();
int gt()
int pt(); ;
privado:
int s;
};
firstso.cpp
#include lt; iostreamgt;
#include "head.h"
A::A(){}
A::~A(){}
int A::gt()
{
s=10
}
int A::pt; ()
{
std::coutlt;lt;slt;lt;std::endl
}
La compilación El comando es el siguiente:
g -shared -o libmy.so firstso.cpp
En este momento, el archivo libmy.so se genera y se copia en la biblioteca del sistema: /usr /lib/
Realizar encapsulación secundaria:
secso.cpp
#include lt; iostreamgt
#include "head.h; "
extern "C"
{
int f();
int f()
{
A a;
a.gt();
a.pt(); >
}
}
Comando de compilación:
gcc -shared -o sec.so secso.cpp -Lmy
.En este momento, se genera el segundo archivo .so, en este momento la biblioteca cambia de una clase a una interfaz c
Copiar a /usr/lib
Iniciar. llamando a:
test .c
#include "stdio.h"
#include "dlfcn.h"
#define SOFILE "sec.so"
int (*f)();
int main()
{
void *dp;
dp=dlopen (SOFILE, RTLD_LAZY);
f=dlsym(dp, "f");
f(); p>return 0;
}
El comando de compilación es el siguiente
:
gcc -rdynamic -s -o myapp test.c
Ejecute Z$./myapp
10
$ p>