¿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':
HIDDLL::isDeviceAttached()’
PaLaser.cxx:(.text+0x1e): referencia indefinida a
/usr/bin/ld: PaLaser.cxx:(.text+0x33): referencia indefinida a HIDDLL::readLASERstate()'
………..
.............
```
donderepresenta todas las cosas definidas en
USBM3.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>
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.