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.

Cómo vincular una biblioteca dinámica (.so file) con mi programa en C para poder depurar mi programa en Visual Studio Code.

Se me ha proporcionado una biblioteca dinámica (.so) generada en la plataforma Linux. El archivo se compila utilizando el siguiente comando.

gcc -c -Wall -Werror -fpic -o factorial.o factorial.c
gcc -shared -o libFactorial.so factorial.o

Ahora he escrito un programa en C para llamar a algunos métodos dentro de la biblioteca (.so) y obtener la salida deseada. La biblioteca dinámica se mantiene en el mismo directorio que mi programa en C. Necesito enlazar la biblioteca con mi programa en C en tiempo de ejecución para poder depurar mi programa en C usando Visual Studio Code.

Compilador: gcc
IDE: Visual Studio Code
Plataforma: Linux
Programa en C: my_C_Program.c
Biblioteca dinámica: libFactorial.so

Cuando compilo y ejecuto mi código utilizando el símbolo del sistema, puedo llamar a los métodos dentro del archivo .so.

Comandos

gcc my_C_Program.c -ldl -o my_C_Program
./my_C_Program -l libFactorial

Pero cuando depuro mi código usando visual studio code, obtengo errores. ¿Necesito enlazar la biblioteca (probablemente estáticamente) con mi programa en C para que reconozca mi biblioteca? No sé cómo hacerlo. ¿Necesito crear un Makefile? Si es así, ¿podría aconsejarme cómo enlazar una biblioteca en él?

Error durante la depuración:

referencia indefinida a dlerror.'
referencia indefinida a
dlsym.’
referencia indefinida a `dlerror.’

Por favor, tenga en cuenta que no tengo que generar la biblioteca dinámica. Es proporcionada por otros.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para vincular la biblioteca dinámica con tu programa en C y depurar usando Visual Studio Code, debes agregar la ruta de la biblioteca y el nombre de la biblioteca en la configuración de inicio de Visual Studio Code.

    Paso 1: Crear un archivo Makefile

    Crea un archivo Makefile con el siguiente contenido:

    CC=gcc
    CFLAGS=-Wall -Werror 
    LDFLAGS=-ldl
    
    all: my_C_Program
    
    my_C_Program: my_C_Program.c
        $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)
    
    clean:
        rm my_C_Program
    

    Este archivo Makefile compilará tu programa en C y lo vinculará con la biblioteca dinámica usando la bandera -ldl.

    Paso 2: Actualizar la configuración de inicio de Visual Studio Code

    Actualiza la configuración de inicio de Visual Studio Code para incluir la ruta y el nombre de la biblioteca.

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Depurar my_C_Program",
                "type": "cppdbg",
                "request": "launch",
                "program": "${workspaceFolder}/my_C_Program",
                "args": ["-l", "libFactorial"],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": true,
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "description": "Habilitar la impresión bonita para gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ]
            }
        ]
    }
    

    En el campo de args, agrega “-l” seguido del nombre de la biblioteca (sin el prefijo “lib” y el sufijo “.so”). Se asume que la ruta de la biblioteca está en el mismo directorio que tu programa en C.

    Paso 3: Ejecutar y depurar

    Compila tu programa en C usando el Makefile ejecutando el comando “make” en la terminal. Luego, selecciona la configuración “Depurar my_C_Program” desde el panel de Depuración en Visual Studio Code y haz clic en el botón Depurar.

    Esto vinculará la biblioteca dinámica con tu programa en C y te permitirá depurarlo sin errores.

Comments are closed.