QtのIDEで下記のmain.cppファイルはコンパイル実行が出来ます。
注)proファイルには、下記の2行が追記されています。
このmain.cppを下記のg++でコンパイルしようとしますと、[全てのlibusb関係のコードでコンパイルエラーとなります。
例えば、 rc = libusb_init(&context); では
” `libusb_init' に対する定義されていない参照です ”のエラーです。
Q1) この原因は、libusbの情報が g++ に届いてない為と想いますが、
g++の構文の変更で解決しますか?
つまり、 proファイルのlink_pkgconfig等が届いてないのでは?
g++ -o sample -g -Wall -Wextra main.cpp $(pkg-config --cflags --libs libusb)
proファイル
CONFIG += link_pkgconfig
PKGCONFIG += libusb-1.0
main.cppファイル
#include <stdio.h>
#include <string.h>
#include <libusb-1.0/libusb.h> //no warning
#include <cassert>
#include <cstdio>
#define REQBYTE 2048
unsigned char dat[REQBYTE];
#define MAXTRANS 1024
unsigned char buf[MAXTRANS];
#define VID 0x1294
#define PID 0x1320
int main(int argc, char *argv[])
{
libusb_context *context = NULL;
libusb_device **list = NULL;
libusb_device *device;
libusb_device_handle *h_dev;
int rc = 0;
int count = 0;
rc = libusb_init(&context);
//`libusb_init' に対する定義されていない参照です
assert(rc == 0);
count = libusb_get_device_list(context, &list);
assert(count > 0);
for (int idx = 0; idx < count; ++idx) {
device = list[idx];
libusb_device_descriptor desc = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};//初期化する場合は型の宣言が必要
//各デバイス毎のdescriptorを、descに得る。
rc = libusb_get_device_descriptor(device, &desc);
assert(rc == 0);
printf("Class: Vendor:Device= %04x: %04x:%04x\n",desc.bDeviceClass, desc.idVendor, desc.idProduct);
if(desc.idVendor==VID) break;
}
int size, transferred, ttlbyte, datptr, ret, i;
printf("Vendor:Device= %04x: %04x\n",VID, PID);
assert(VID == 0x1294);
assert(PID == 0x1320);
for(int i=0; i<1; i++){
h_dev=libusb_open_device_with_vid_pid(NULL,VID,PID);
printf("h_dev=%x\n", (int)h_dev);
}
assert((int)h_dev>0);
libusb_set_auto_detach_kernel_driver(h_dev, 1);
libusb_set_configuration( h_dev , 1 );
libusb_claim_interface( h_dev , 0 );
libusb_set_interface_alt_setting( h_dev , 0 , 0 );
size=6;
for(int i=0; i<size; i++){
buf[i]='a';
}
ret=libusb_bulk_transfer(h_dev,0x01,buf,size,&transferred,1000);//⑧
if (ret==0 )
printf("<<<EP1 BULK OUT %dBYTE try --> %dBYTE success>>>\n",size,transferred);
else{
printf("<<<EP1 BULK OUT Error (%d)>>>\n",ret);
goto CLOSE;
}
CLOSE:
libusb_release_interface(h_dev,0);
libusb_close(h_dev);
libusb_exit(NULL);
return 0;
}
度々、初歩的な質問ですが、宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。