私の C++ プログラムから呼び出したい、他の誰かが作成した C ライブラリがあります。C ヘッダーは次のように構成されています。
#ifndef INC_MOVE_CLIENT_H
#define INC_MOVE_CLIENT_H
#ifdef __cplusplus
extern "C" {
#endif
...
int serverConnect(const char *, const char *, MoveStateDeferred *);
...
#ifdef __cplusplus
}
#endif
#endif // ... INC_MOVE_CLIENT_H
次のように、C++ プログラムで serverConnect を呼び出しています。
#include "helloworld.h"
#include "moveclient.h"
int main(int argc, const char* argv[]) {
const char* ip = "192.168.1.2";
const char* port = "7899";
MoveStateDeferred* m;
serverConnect(ip, port, m);
}
これらの指示によると、これは正しいように思えますが、コンパイルしようとすると次のようになります。
$ gcc helloworld.cpp -o helloworld.out
/tmp/ccuS93Yu.o: In function `main':
helloworld.cpp:(.text+0x3c): undefined reference to `serverConnect'
collect2: ld returned 1 exit status
moveclient.c には serverConnect が実装されており、他のファイルと同じディレクトリにあります。コンパイルに間違ったコマンドを使用していませんか? moveclient.c もコンパイルするために必要なことはありますか? それとも、コンパイルコマンドとは関係のないものですか?