我有一個由其他人編寫的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
我在我的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);
}
這似乎是正確的,以我根據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編譯以及?還是與編譯commadn無關?
一個重要的事情需要注意的是,如果你不使用'g ++'而不是'gcc'來進行編譯,你可能會得到更多的鏈接錯誤。 – 2012-08-01 05:52:55
請注意,您將傳遞一個未初始化且因此無效的指針作爲serverConnect的第三個參數,MoveStateDeferred *。您需要初始化m以指向有效的MoveStateDeferred,或者更可能的是,將m聲明爲MoveStateDeferred m,然後使用&m作爲serverConnect的第三個參數。 – 2014-06-03 16:02:19