У меня есть библиотека C, написанная кем-то еще, которую я хочу вызвать из моей программы на C++. Заголовок 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
Я звоню serverConnect в моей C++ следующим образом:
#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);
}
Это кажется правильным мне по these instructions, но когда я пытаюсь скомпилировать я получаю :
$ 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? Или это что-то еще не связано с компиляцией?
важная вещь обратите внимание, что если вы не используете 'g ++', а не 'gcc' для компиляции, вы, скорее всего, получите дальнейшие ошибки ссылок. –
Обратите внимание, что вы передаете неинициализированный и, следовательно, неверный указатель в качестве третьего аргумента serverConnect, MoveStateDeferred *. Вам нужно либо инициализировать m, чтобы указать на допустимый MoveStateDeferred, либо, более вероятно, объявить m как MoveStateDeferred m, а затем использовать & m как третий аргумент serverConnect. –