Red de conocimiento informático - Material del sitio web - Cómo generar .so para Mono usando lenguaje C

Cómo generar .so para Mono usando lenguaje C

La intención original de crear Mono era atraer más programadores de Windows .Net para que se unieran a la plataforma Linux. Sin embargo, el lenguaje C sigue siendo el lenguaje principal en la plataforma Linux. Sin embargo, C sigue siendo el lenguaje dominante en el mundo Linux. Muchas veces, las aplicaciones críticas (por ejemplo, grandes operaciones de productos cartesianos, llamadas a funciones de hardware de plataforma) deben depender del lenguaje C.

En el mundo Linux, el lenguaje C sigue siendo el lenguaje principal.

Aquí es donde Mono se convierte en un dolor de cabeza.

Por supuesto, puede utilizar la función DLLImport para llamar a bibliotecas nativas (.so). Ahora hablemos de cómo generar sus propias bibliotecas nativas y llamarlas desde Mono.

Primero, escriba una función simple en lenguaje C, que solo se usa para devolver el resultado de agregar dos parámetros extraños.

//El nombre del archivo es sum.c

#include

int sum(int a, int b)

{

return a + b;

}

OK Genere la biblioteca local de destino llamada libsum.so. Utilice el compilador GCC para compilar los resultados que queremos

gcc -Wall -fPIC -O2 -c -o libsum.o sum.c //generate .o

gcc -shared - Wl,-soname,libsum.so -o libsum.so libsum.o //este es el paso que genera *** el archivo .so.**archivo so

Esta vez, libsum.so tiene generado, ahora puedes usarlo en Mono.

usando System;

usando System.Runtime.InteropServices;

clase pública UnsafeDemo

{

[ DllImport ("libsum.so", EntryPoint="sum")]//asegúrese de especificar EntryPoint

static extern int sum(int a, int b);

static extern void Main()

{

int x = suma(23, 45);

Console.WriteLine("x: {0}", x) ;

}

}

Luego podemos compilar nuestro programa:

$ mcs --unsafe UnsafeDemo.cs

$ mono UnsafeDemo.exe

Si no se encuentra libsum.so al compilar el programa, puede intentar colocar libsum.so en el mismo directorio que UnsafeDemo.exe.

Si no puede encontrar libsum.so, puede intentar colocar libsum.so en el mismo directorio que UnsafeDemo.exe.

Si no se puede encontrar libsum.so, puede intentar colocar libsum.so en el mismo directorio que UnsafeDemo.exe.

Si no se puede encontrar libsum.so, puede intentar colocar libsum.so en el mismo directorio que UnsafeDemo.exe. El uso mono es inusual.

//Segmento de código C

int debug (char *s)

{

printf("Salida: %s/n ", s);

devuelve -1;

}