私は入門チュートリアル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
私はしかし、私は本当に私がきたようにしようとするのか分からない、これは何とか正しくヘッダファイルを使用していないことを集めますステップをかなり徹底的に続けました。
誰かがそのエラーを投げる理由を知っていれば、私は非常に感謝します。
おかげ
**ここでUPDATE は、3つのソースファイルのコードです:
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);
この変更により、プログラムをリンクすることができ、今すぐ実行することができます。私は起こっているかもしれないと思うのは、2番目のexternが最初のexternを上書きしていたということです。誰かがこれについての洞察を持っているなら、私は知ることに興味があるでしょう。
ご協力いただきありがとうございます。
自分のファイルのコードを入力してください。 – Pepe
これをコンパイルするために使用している行を表示できますか? reciprocal.cppはコンパイルされていないか、リンクされていないようなサウンドです。 –