es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cargando la biblioteca de C desde C# con PInvoke en dotnet core.

Construí la siguiente biblioteca en C:

#define _GNU_SOURCE
#include <pthread.h>
#include <sched.h>

int attachCurrentThreadToCore(int core);

int main(void) {
return 0;
}

int attachCurrentThreadToCore(int core) {

pthread_t thread;

thread = pthread_self();

cpu_set_t set;

CPU_ZERO(&set);

CPU_SET(core, &set);

return pthread_setaffinity_np(thread, sizeof(cpu_set_t), &set);

}

y ahora estoy tratando de invocar attachCurrentThreadToCore.

Este es mi código de prueba de pinvoking:

[DllImport(“/home/anon/Documents/RadFramework/RadFramework.Libraries.Threading/src/TestProject1/bin/Debug/net5.0/pthreadWrapper”)]
private static extern int attachCurrentThreadToCore(int core);

[Test]
public void Test1()
{
attachCurrentThreadToCore(0);
while (true)
{
}
}

Ahora esperaría que el núcleo 1 de mi máquina girara en el bucle while. En cambio, recibo esta excepción al pinvocar:

No se puede cargar la biblioteca compartida ‘/home/anon/Documents/RadFramework/RadFramework.Libraries.Threading/src/TestProject1/bin/Debug/net5.0/pthreadWrapper’ ni una de sus dependencias. Para ayudar a diagnosticar problemas de carga, considere establecer la variable de entorno LD_DEBUG: /home/anon/Documents/RadFramework/RadFramework.Libraries.Threading/src/TestProject1/bin/Debug/net5.0/pthreadWrapper: no se puede cargar dinámicamente el ejecutable independiente de la posición.

Creo que se reduce a “no se puede cargar dinámicamente el ejecutable independiente de la posición”.

¿Hay algo más que necesito hacer al compilar mi biblioteca en C?

¡Gracias de antemano :)!</sched.h></pthread.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no estoy seguro de los pasos que debes seguir para compilar la biblioteca c. Sin embargo, según el mensaje de error, parece que puede haber un problema con el proceso de compilación que está impidiendo que la biblioteca se cargue correctamente. En este caso, puede ser útil verificar si la biblioteca se compiló con las banderas y configuraciones correctas.

    Además, es posible que desees intentar establecer la variable de entorno LD_LIBRARY_PATH para especificar la ruta al directorio donde se encuentra pthreadWrapper. Esto puede resolver el problema si la biblioteca no se está encontrando debido a un problema de ruta.

    Te sugiero que consultes con un desarrollador más experimentado o que consultes la documentación oficial de C y C++ para obtener más información y orientación.

Comments are closed.