質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2075閲覧

UbuntuのQtのコンパイルに関連した質問です。

nqf27650

総合スコア115

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/03/13 08:04

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;
}

度々、初歩的な質問ですが、宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

モジュール名を正しく書かなければならない。
/usr/local/lib/pkgconfig
1)fftw3.pc
2)libusb-1.0.pc
上記の、モジュール名を”libusb-1.0”を書かなければならない。
下記参照

g++ -o sample -g -Wall -Wextra main.cpp $(pkg-config --cflags --libs libusb-1.0)

以上

投稿2017/03/13 10:47

nqf27650

総合スコア115

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問