3
我創建了一些簡單的基本代碼來說明我的問題。將C++ exe與C庫(GNU)連接起來的麻煩
header.h:
#ifdef __cplusplus
# define API extern "C"
#else
# define API
#endif
void callback();
API void libFunction();
testlib.c:
#include "header.h"
void libFunction()
{
Callback();
}
我編譯這是像這樣一個靜態庫:
gcc -c testlib.c
ar rsc libtest.a testlib.o
然後我的樣本C++代碼是
main.cpp:
extern "C"{
#include <lib/header.h>
}
#include <stdio.h>
main()
{
libFunction();
}
void Callback()
{
printf("Callback is called \n");
}
,我嘗試建立我的exe文件,以便
g++ -I. -L. main.cpp -ltest
,並出現以下錯誤
./lib/libtest.a(testlib.o): In function `libFunction':
testlib.c:(.text+0x7): undefined reference to `Callback'
collect2: ld returned 1 exit status
我花了字面上整天試圖找出原因。任何人都可以幫忙嗎?
嗨,你是正確的案件不匹配,這是我發佈的代碼唯一的問題。我修正了它,現在正在編譯,即使沒有extern。 – 2013-02-12 21:00:04
現在我只需要找出爲什麼我的大「真正」的代碼不鏈接大聲笑,謝謝你的答覆 – 2013-02-12 21:00:30
@BrandonYates - 是的,這是有道理的。我沒有注意到'main.cpp'文件中''include'語句的'extern'C''包裝器。你應該確定只是修理案件。 – 2013-02-12 21:00:53