1

少し C++ を独学するために、Saitek X52 Pro ジョイスティック ディスプレイにテキストを書き込む小さなプログラムを作成することにしました。

Eduards C-library http://plasma.hasenleithner.at/x52pro/を使いたかった

C++ プログラムでメソッドを使用する場合、メソッドの周りに「extern C」を配置する必要があることはわかっています。しかし、それはライブラリのヘッダファイルを変更することを意味します - そしてそれはもうビルドされません. この場合、どのようなアプローチが正しいでしょうか?

編集: 提案された方法は部分的に機能しました。

Comm.cpp:

...
extern "C"{
#include <x52pro.h>
}
using namespace std;
int main ( int argc, char *argv[] ) {
    cout<<"entered main"<<endl;
    char *String;
    strcpy(String,"testing");
    struct x52 *hdl = x52_init();
    x52_settext(hdl, 0,String , 7);
    x52_close(hdl);
    return EXIT_SUCCESS;
}

エラーメッセージ:

Comm.o: In function `main': 
Comm.cpp|38| undefined reference to `x52_init' 
Comm.cpp|39| undefined reference to `x52_settext' 
Comm.cpp|40| undefined reference to `x52_close'

x52pro.h で定義されているすべてのメソッドです。

4

3 に答える 3

4

extern "C"Cヘッダーファイルで使用するには、次のようにラップします

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

#includeまたは、 s をラップすることができますextern "C"

extern "C" {
#include <chdr1.h>
#include <chdr2.h>
}

アプリケーションをリンクするときは、使用するライブラリとライブラリの場所をリンカーに伝える必要があります。リンクから、libusb も追加する必要があります。大体こんな感じ

g++ -o app_name Comm.o -L /path/to/library -lx52pro -lusb

ライブラリがシステムの lib ディレクトリにインストールされている場合は、この-L /path/...部分を省略できます。Makefile を使用する場合は、通常、いくつかの変数でこれを定義します。

LDFLAGS = -L /path/to/library
LDLIBS = -lx52pro -lusb

コンパイルとリンクおよび ウィキペディア - リンカー (コンピューティング)も参照してください。

于 2013-01-18T22:37:21.123 に答える
0
#ifdef __cplusplus
   extern C {
#endif 
    ...

#ifdef __cplusplus
   }
#endif
于 2013-01-18T22:36:29.037 に答える
0

extern "C"C++ コードでは、インクルードされたヘッダー ファイルを次のように囲むことができます。

extern "C" {
#include "c_header_file.h"
}

その後、サードパーティ ライブラリのヘッダー ファイルを変更する必要はありません。

于 2013-01-18T22:36:30.670 に答える