我正在按照介紹教程http://www.linuxinsight.com/files/alp/alp-ch01-getting-started.pdf。使用C++頭文件在簡單C程序中鏈接錯誤
我創建了源文件main.c,reciprocal.cpp和reciprocal.hpp。我已經能夠成功地編譯這些文件。問題是當我去聯繫他們,我收到以下錯誤信息:
main.o: In function `main':
main.c:(.text+0x30): undefined reference to `reciprocal'
collect2: ld returned 1 exit status
據我瞭解,這是有點不正確使用的頭文件,但是我真的不知道該怎麼嘗試,因爲我已經完全遵循了這些步驟。
如果有人有一個想法,爲什麼它扔這個錯誤,我將非常感激。
感謝
**更新 下面是三個源文件代碼:
的main.c
#include <stdio.h>
#include "reciprocal.hpp"
int main (int argc, char **argv) {
int i;
i = atoi(argv[1]);
printf("The reciprocal of %d is %g\n", i, reciprocal(i));
return 0;
}
reciprocal.cpp
#include <cassert>
#include "reciprocal.hpp"
double reciprocal(int i) {
assert(i != 0);
return 1.0/i;
}
reciprocal.hpp
#ifdef __cplusplus
extern "C" {
#endif
double reciprocal(int i);
#ifdef __cplusplus
}
#endif
自實際發佈以來,我實際上修改了reciprocal.hpp。我做的唯一更改是從函數簽名中刪除extern關鍵字。它以前讀取
extern double reciprocal(int i);
此更改允許我鏈接程序,我現在可以運行它。我認爲可能發生的事情是第二次外在壓倒第一次。如果有人對此有所瞭解,我會有興趣知道。
感謝您的協助。
你能提供你自己的文件的代碼? – Pepe
你能告訴我們你用什麼線來編譯它嗎?聽起來像reciprocal.cpp沒有編譯或沒有被鏈接。 –