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 decirle a g++ que utilice contenido de un archivo .lib?

Estoy tratando de compilar un código C++ utilizando g++ en Linux, que utiliza algunas funciones definidas en un archivo de encabezado creado por alguien. No tengo mucha experiencia en C++, así que no estoy seguro de cómo proceder (o incluso si entiendo lo que se debe hacer).

Tengo todos estos archivos en un solo directorio:
PaLaser.cxx, este es el archivo principal.
USBM3.h
hidapi.h
hidapi.lib
hidapi.dll
USBM3.lib
USBM3.dll

Esto fue creado por alguien para Windows y ahora quiero compilarlo para Linux. El archivo USBM3.h se ve así:

#include <sstream>
#include <string.h>

using namespace std;

class HIDDLL
{ 
private:
    static void init();
    static void SendDataToUSB();
    static int parseChar(unsigned char);
    static void ParseByte(string);
    static int openFile(char *);
    static void SendFile();
    static void readADC();

public:
    /* Este método se utiliza para generar una secuencia */
    static __attribute__((visibility("default"))) void seqMODE(int mode);

    /* Este método se utiliza para apagar el LASER */
    static __attribute__((visibility("default"))) void LASERTurnOff(void);

    /* Este método se utiliza para enviar datos de frecuencia a ARM */
    static __attribute__((visibility("default"))) void sendFreq(int freq);

    bla bla bla
};

Y en PaLaser.cxx está esto:

#include "hidapi.h"
#include "USBM3.h"
#pragma comment(lib, "USBM3.lib")

Cuando ejecuto

g++ PaLaser.cxx -o PaLaser

Obtengo

/usr/bin/ld: /tmp/ccUXpAbN.o: in function main':
PaLaser.cxx:(.text+0x1e): referencia indefinida a
HIDDLL::isDeviceAttached()’
/usr/bin/ld: PaLaser.cxx:(.text+0x33): referencia indefinida a HIDDLL::readLASERstate()'
.............
```
donde
………..representa todas las cosas definidas enUSBM3.h`.

No estoy seguro de si estas cosas están organizadas dentro del archivo USBM3.lib, pero espero que sí. ¿Cómo le digo a g++ que lo busque ahí?</string.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para compilar el programa C++ con g++ en Linux y vincularlo con el archivo de biblioteca USBM3.lib, debes agregar las siguientes banderas al comando g++:

    g++ PaLaser.cxx -o PaLaser -L. -lUSBM3 -lhidapi

    Aquí, la bandera -L. especifica buscar los archivos de biblioteca en el directorio actual, mientras que las banderas -lUSBM3 y -lhidapi especifican el nombre de los archivos de biblioteca a vincular.

    Si los archivos de biblioteca no se encuentran en el directorio actual, puedes especificar la ruta completa al directorio que contiene los archivos de biblioteca utilizando la bandera -L/path/to/lib.

    Adicionalmente, es posible que necesites incluir la ruta al directorio de archivos de encabezado utilizando la bandera -I/path/to/header si los archivos de encabezado no se encuentran en el mismo directorio que el código fuente.

Comments are closed.