Как сказать g использовать материал из файла .lib?

#c #linux #g #lib

#c #linux #g #библиотека

Вопрос:

Я пытаюсь скомпилировать C с использованием g в Linux, который использует некоторые функции, определенные в заголовочном файле, созданном кем-то. У меня мало опыта работы с C , поэтому я не уверен, как действовать дальше (или даже если я понимаю, что нужно сделать).

У меня есть все эти файлы в одном каталоге:

  • PaLaser.cxx , это основное.
  • USBM3.h
  • hidapi.h
  • hidapi.lib
  • hidapi.dll
  • USBM3.lib
  • USBM3.dll

Это было создано кем-то для Windows, и теперь я хочу скомпилировать для Linux. USBM3.h Выглядит так:

 #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:

         /* This method is used to generate sequence  */
        static __attribute__((visibility("default"))) void  seqMODE(int mode);

        /* This method is used to turn off LASER */
        static __attribute__((visibility("default"))) void  LASERTurnOff(void);

         /* This method is used to send freq data to ARM   */ 
        static __attribute__((visibility("default"))) void  sendFreq(int freq);

        bla bla bla

    };
    

 

и в PaLaser.cxx этом есть:

 #include "hidapi.h"
#include "USBM3.h"

#pragma comment(lib, "USBM3.lib")
 

Когда я запускаю

 g   PaLaser.cxx -o PaLaser
 

Я получаю

 /usr/bin/ld: /tmp/ccUXpAbN.o: in function `main':
PaLaser.cxx:(.text 0x1e): undefined reference to `HIDDLL::isDeviceAttached()'
/usr/bin/ld: PaLaser.cxx:(.text 0x33): undefined reference to `HIDDLL::readLASERstate()'
.............
 

где ........... означает все вещи, определенные в USBM3.h .

Я не уверен, упакованы ли эти вещи в USBM3.lib файл, но я надеюсь, что это так. Как мне сказать g , чтобы он посмотрел там?

Комментарии:

1. файлы .lib и .dll обычно зависят от Windows и вообще не могут использоваться в Linux.

2. О, я думал, что dll предназначена для Windows, а .lib — для Linux…

3. Нет .so , и .a файлы предназначены для Linux. .dll и .lib это Windows.

4. .lib — это статическая или экспортируемая библиотека, обычно создаваемая и используемая компоновщиком Microsoft Visual C .

5. В принципе, да, вам нужно hidapi.so и USBM3.so или исходный код для их компиляции.