・申し訳ありません、過去質問したのですが、要点を得ない書き方になってしまっていました。現在の問題点に限っての再質問をお許し下さるようお願い致します。
・MinGW-w32及びw64のC言語では問題なくコンパイルと計算実行できているプログラムですが、C++コンパイルしようとすると、下記のエラーが表示されます。
「undefined reference to subroutine A(double*, double*, double, int, ---)」
色々試したのですが、解消されません。referenceを成功させるためのお知恵がありましたらお教え下さい。
・試したこと
(1)ネットを調べましたら、makefileのLDFRAGSに、(lib)-liconvを追加する。とありましたので実施しましたが、改善しませんでした。
(2)該当のサブルーチンAを"//"、または削除としてみたところ、エラーは無くなり、計算実行も可能となりました。しかしながら、当然、正しい結果は出てきません。、
その subroutine A() を実装してはずのオブジェクトファイルをリンクしていますか? リンクしているなら、ソースのファイル名はなんでしたか?
削除してみたというのは宣言ですか、定義ですか?
ソースとヘッダはどのような構成になっていますか?
int32_t様:ご意見有難うございます。質問の意味が分かりかねますが、ともかく、最初にサブルーチンのプロトタイプ宣言、mainで呼び出し、サブルーチン本文、の記載順序です。
SaitoAtsushi様:有難うございます。削除は2方法で実施しました。
(1) プロトタイプ宣言、main呼び出し、サブルーチン本文、の全て削除
(2) main中の呼び出し部のみ削除、
両方式とも結果に変わりはないため、現在は(2)に基づいて、"//"(コメント文化)で進めております。
完全なエラーやコードやMakefileを開示してないので、憶測しか言えない状態になってますね。
> 最初にサブルーチンのプロトタイプ宣言、mainで呼び出し、サブルーチン本文
関係するソースコードは1つしかないということですね?
独自の用語は避けてください。 サブルーチンと呼んでいるものは (C/C++ 用語でいうところの) 関数のことですね?
それと他の方も指摘していますが情報が小出しすぎます。 必要な情報が何なのか見極められるならこんなところで質問しなくても解決できています。 質問者には意味のある抽出は出来ないので情報を取捨選択しないでください。
あまりに巨大なソースコードだとさすがに困りますが、問題を再現できる程度の情報が示されればそんなに難しい質問ではないはずなのに細かな質問を繰り返さなければならないのは回答者にとって若干のいらだちを感じるということをわかってください。
SaitoAtsushi 様、度々ご回答を頂き申し訳ありません。Fortranでの命名はサブルーチン、"C”でもサブルーチン(の関数)と記載されております。サブルーチン数も36あります、かなり大きなプログラムです。全部の掲示は無理です。情報は小出しのつもりはありません。エラー指摘されているように、サブルーチン名(型名+引数、----)、それに、ヘッダーファイルがあれば十分と考えました。ヘッダーファイル名もエラーメッセージに並べて掲示するべきだったと思っています。ヘッダーファイルは#include <cstdio>,#include<cstdlib>,#include <math.h>,#include <time.h>
です。何か不足していますでしょうか、
int32_t 様、度々のご意見有難うございます。
・完全なエラーメッセージは、どこかに述べましたが、a.cpp:(.text+0xb8f4): undefined reference to sub_A(引数)collect2.exe error ld returned exit status です。makefileはMinGW-w64から見ることができます。またソースコードは一つだけです。
> ソースコードは一つだけです。
この情報でかなり原因は絞られたと思います。
ともかくプロトタイプ宣言と関数定義のシグネチャ部を開示してください。
> 情報は小出しのつもりはありません。
情報量としては、回答者があなたの行った作業を完全に再現して、エラーを確認できることが理想です。
それができないとすれば、情報が足りていないということです。足りない部分が、質問者と回答者とで互いに共通している「常識」で補えるのならよいのですが、質問者が一方的に「これは要らない」「これは無駄だ」「これは変えてもいい」と思うだけで情報を削除・改変していたら、それは単なる情報不足(あるいは誤った情報)です。
あなたの「つもり」はともかく、複数の回答者が情報が足りない、と思っているから「追記・修正」の欄の投稿数が伸びるのではないでしょうか?
>下記のエラーが表示されます。
>「undefined reference to subroutine A(double*, double*, double, int, ---)」
この「」の中身はどこに表示されたのでしょうか?
表示された画像をSnippingツールや、スクリーンショットをとって貼ってみてはいかがでしょうか?
yominet様、ご関心有難うございます、エラー表示は画面の最初です。
回答6件
あなたの回答
tips
プレビュー