質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • GCC

    134questions

    GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

  • FORTRAN

    55questions

    FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

gfortranで関数が見つからないというundefined symbols ...エラーが出ます。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 390

nishiys

score 5

下記のstl_reshape.f90, calc_deformation.f90を用いたmain.f90を

gfortran calc_deformation.f90 stl_reshape.f90 main.f90 -o main.exec

とgfortranでコンパイルすると

Undefined symbols for architecture x86_64:
"_calcdeform_", referenced from:
___stl_reshape_MOD_calcstl in ccfyAJdE.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

というようなエラーが出ます。
-cオプションでコンパイルのみ行うときはエラーが出ないので、リンク時にエラーが出ているのだと思うのですが、
エラーをなくすにはどうしたら良いでしょうか?

エラーが出るのは関数だけで、subroutineの方は問題ないようです。

------------------------------- main.f90 -------------------------------------
program main
use stl_reshape
implicit none
...

call calcSTL
end program main


--------------------------------- stl_reshape.f90 ------------------------------
module stl_reshape
use calc_deformation

implicit none

private
public :: calcSTL

contains

...

subroutine calcSTL
double precision calcDeform 
...

do i=1,num_vertex
vertex_arr(1,3,i) = calcDeform(vertex_arr(1,2,i))
vertex_arr(2,3,i) = calcDeform(vertex_arr(2,2,i))
vertex_arr(3,3,i) = calcDeform(vertex_arr(3,2,i))
enddo

...
end subroutine calcSTL 
end module stl_reshape


--------------------------------- calc_deformation.f90 --------------------------
module calc_deformation
implicit none
private
public :: calcDeform 

contains

function calcDeform(y)
double precision, intent(in) :: y 
double precision calcDeform

calcDeform = y**2

end function calcDeform

end module calc_deformation


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

こんにちは。直接の回答ではないこと、ご了承ください。

コードが一部、省略されていて同じエラーが再現しないのですが、public :: calcDeformが外部シンボルとして正しく認識されていないように思えます。

calcSTL サブルーチンで calcDeform関数が呼ばれているものの、同時に同じ名前でcalcDeform変数が宣言されてもいるので、混乱があったりするのではないでしょうか。

double precision calcDeform


vertex_arr関数(?)がどのような定義になっているか分からないですが、コードをもう少し提示すれば良い回答がいただけるかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/29 16:11

    関数の定義の仕方を
    function calcDerfom(y) return (w)
    のようにすることで解決できました。
    もしかすると配列を引数に取り、配列を返す関数はこちらの定義の仕方でないとダメなのか(ただループ内に入れているので、普通の変数を引数にとって普通の変数で返しているので違うかも知れませんが、、)、関数の型宣言のところでおかしなことが起こっていたのかも知れません。
    いずれにせよ、解決のヒントになりました。ご回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    計算機のプログラム

    初めて質問投稿します。質問に対して不足している情報などあるかもしれませんが、ご容赦ください。 Javaで簡単な計算機の仕組みを作ろうとしています。 しかし、いざコンパイルしようと

  • 解決済

    [VB.Net] Windowsのハードディスク情報する方法

    CドライブのGUIDを取得する方法はありますか? よろしくお願いします。

  • 解決済

    ポインタをループ変数として使用する

    いつもお世話になっています。c言語初心者で、勉強中です。ポインタについて質問させて頂きます。課題で、N個(マクロで5と定義してある)の浮動小数データを入力すると 小さい順に並び換え

  • 解決済

    Javaでそれぞれの英単語のTFIDFの求め方がわかりません。

    Javaを独学で勉強中のJava初心者です。Javaで英文テキストファイルを読み込みそれぞれの英単語のTFIDFを表示させるプログラムを作りたいのですが、どうしてもうまくできません

  • 解決済

    double型の範囲について

    前提・実現したいこと 毎度お世話になっております。グラフで曲線を描きたいと思っております。 結果を格納する変数にdouble型を用いているのですが、途中から値がおかしくなります

  • 解決済

    C言語についての質問

    c言語 このプログラムを動かし足し算~割り算をしたいのですが、動きません。 どこが悪いのか、ここはこうしたほうがいいというところを教えてください。 include <stdio

  • 解決済

    fscanfがうまく動作しない

    前提・実現したいこと テキストファイルから情報を取り込みたい。 中身は Dbrenlhsij,11,162.2,55.9 Ijnpwthy,14,163.8,62.6 Csaztv

  • 受付中

    ヘロンの公式を用いて三角形の面積を求める。

    前提・実現したいこと 2次元空間上の点のクラス Point2D Point2D のインスタンス 2点 a と b, 及び原点からなる3角形のクラス Triangle を作成する。

同じタグがついた質問を見る

  • GCC

    134questions

    GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

  • FORTRAN

    55questions

    FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。