からmvndst_()サブルーチンを呼び出すC++プログラムを書きたい
http://www.math.wsu.edu/faculty/genz/software/fort77/mvndstpack.f
Linuxで、test.ccを作成すると、次のようになります。
extern "C" {
int mvndst_(int *, double *, double *, int *, double *, int *,
double *, double *, double *, double *, int *);
};
int main() {
return 0;
}
を介してコンパイルします
g++ -c -o test.o test.cc
gfortran -c -o mvndstpack.o mvndstpack.f
gfortran -Mnomain -o test test.o mvndstpack.o
それから私は得る
mvndstpack.o: In function `main':
mvndstpack.f:(.text+0x4a2a): multiple definition of `main'
test.o:test.cc:(.text+0x0): first defined here
collect2: ld returned 1 exit status
ただし、strip -N main mvndstpack.o
リンクする前に実行すると、リンクは成功します。-Mnomainフラグがここで機能しなかった理由を誰かが説明できますか?また、Mac OS Xでの「ストリップ」の動作が異なるように見えるため、「ストリップ」を使用するソリューションは避けたいと思います(つまり、-Nオプションは使用できず、別の方法がわかりません。正しい動作を取得します)。また、可能であれば、元のFortranソースの編集は避けたいと思います。
詳細:-GNU Fortran(Ubuntu / Linaro 4.6.1-9ubuntu3)4.6.1-g ++(Ubuntu / Linaro 4.6.1-9ubuntu3)4.6.1-GNUストリップ(Ubuntu用GNU Binutils)2.21.53.20110810-MacOS上のストリップX10.6スノーレオパード