私は周りを見回しましたが、EXC_BAD_ACCESSの問題はたくさんありますが、どれも役に立ちませんでした。
Mountain Lion(OSX 10.8だと思いますか?)とPGI12を使用しています。
CからFortran関数を呼び出すことができないようです。簡略化されたケースを作成しましたが、整数を渡すことができないようです。
私のFortran関数は次のとおりです。
1 integer function smallFortran(a) result(res) bind(c,name='smallFortran_')
2 !integer function smallFortran(a) result(res)
3
4 use ISO_C_BINDING
5 implicit none
6
7 integer(kind=c_int), intent(IN) :: a
8 !integer, intent(IN) :: a
9
10 print *,'A = ', a
11 res = a;
12
13 endfunction smallFortran
そして私のC関数は、
int main() {
int ier=7;
ier = smallFortran_(8);
}
それを構築します。
matt@pontus:diffFst$ make
pgcc -c cDoDiffFst.c
PGC-W-0267-#warning -- "Unsupported compiler detected" (/usr/include/sys/cdefs.h: 81)
PGC/x86-64 OSX 12.9-0: compilation completed with warnings
pgcc -g -O0 -traceback -o cDoDiffFst cDoDiffFst.o smallFortran.o -lpgf90 -lpghpf2 -lpgf90rtl -lpgftnrtl -lpghpf_rpm
(警告が私の問題の原因ではないことを願っています。PGIユーザーフォーラムは、新しいバージョンのファイルを送信すると言ってこれに応答しますが、まだ返信されていません。PGIがなぜそうする必要があるのかわかりません。指定する多くの追加ライブラリ)
デバッガーで実行すると。
matt@pontus:diffFst$ gdb cDoDiffFst
(gdb) run
Starting program: /Users/matt/aurams/trunk/utils/diffFst/cDoDiffFst
Reading symbols for shared libraries +............................. done
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000008
0x0000000100001906 in _smallFortran_ (a=Cannot access memory at address 0x8
) at smallFortran.f90:10
10 print *,'A = ', a
(gdb)
私は完全に迷子になっていますが、なぜintを送信できないのですか?整数に値を割り当てて送信しようとしましたが、サイコロはありません。サブルーチンとして試しましたが、戻り値なしで試しました。何も機能しません。