• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++の関数をfortranから呼びたい。(intelFortran,)

C++の関数をFortranから呼ぶ方法とエラーの解決方法

Tacosanの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

未解決シンボルの 1つ, _FUNCHELLOC についてすらわからないとすると, かなり困った状況なんだけどなぁ. 今までの経験からどういうことか理解してください. あとの 4つは #2 で言われるように C++標準ライブラリでしょう.

yuki7091
質問者

お礼

結果から申し上げますと、リンクできませんでした。 >ifort helloFortran.obj funcHelloC.o /link の結果は、 #2でお答えした内容そのままが出力されます。 >ifort helloFortran.obj funcHelloC.o /link /lC:\MinGW\lib\stdc++ の結果は、 "LINK :warning LNK4044:オプション'/lC:\MinGW\lib\stdc++'は無効です。無視されます。" というメッセージと#2でお答えした内容が出力されます。 本当に、はまっています。

yuki7091
質問者

補足

ご回答、有難うございます。 http://www.issp.u-tokyo.ac.jp/super/manual/system-b/Intel_Fdoc100/main_for/mergedProjects/bldaps_for//common/bldaps_compile_mlang.htm こちらを参考にさせて頂くと、 >ifort helloFortran.obj funcHelloC.o /link で、_FUNCHELLOCとのリンクができるのかな、と思っています。 更に、 >ifort helloFortran.obj funcHelloC.o /link /lC:\MinGW\lib\stdc++ とすれば、c++ライブラリと呼べるのかな、と思っています。 (C:\MinGW\lib\libstdc++.aを呼びたいので。) 全く検討違いな考え方をしているのであれば、すみません。 いずれにせよ、まだ実行していないので、確認しだいご連絡します。 (ちなみにC++は経験があるのですが、fortranは使い始めて  まだ1ヶ月も経っていないレベルなので、四苦八苦しています。)

関連するQ&A

  • C++の関数をfortranから呼びたい。(g++, vc2005)

    C++の関数をfortranから呼びたい。(g++, vc2005) いつも大変お世話になっています。 以前、下記の質問させて頂いたのですが、 再度問題が発生したので改めて質問させて頂きます。 http://okwave.jp/qa/q5806443.html WindowsXPで MinGWを入れて、fortranコンパイラはg77を VC++2005を入れて、c++コンパイラはclで 実行しようとしています。 以下の内容が実行結果なのですが、 リンクのときにwarningが出ますが、これは何なのでしょうか? 宜しければ、ご教授お願いします。 ※ソースは前回の質問に載せてあります。 D:\C>g77 -c helloFortran.f D:\C>cl /c /EHsc funcHelloC.cpp Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. funcHelloC.cpp D:\C>g77 helloFortran.o funcHelloC.obj Warning: .drectve `/DEFAULTLIB:"libcpmt" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unr ecognized D:\C>

  • c言語とfortranの混在プログラミング

    cとfortranの混合プログラミングについての質問です。環境はWindows上でVisual studio 2005/Intel fortran 9.1です。 --c側(ctest6.cpp) #include <stdio.h> extern "C" void __stdcall fsub(){ printf("TEST PROGRAM!!\n"); } --fortran側(ftest6.f90) PROGRAM MAIN call FSUB END --エラー ctest6.obj:error LNK2019:未解決の外部シンボル_fsubが関数_mainで参照されました。 ftest6.obj:error LNK2019:未解決の外部シンボル_FSUBが関数_MAIN_で参照されました。 ftest6.exe:fatal error LNK1120:外部参照2が未解決です。 ---- __stdcall fsub()"の部分を過去の質問等を参考にし、色々(cのfsubを_fsubやfsub_にしたりと"_"を追加したり)と試してみたりしたのですが、上記のエラーがでてしまいます。fortran側で_FSUBと記入できない点が課題な気がしているのですが、ご教授いただけないでしょうか?

  • c++の関数をfortranから呼びたい

    c++の関数をfortranから呼びたい windowsXPのコマンドプロンプト上で VC2005でコンパイルしたc++の関数を fortranから呼びたいと思います。 fortranのソースはg77でコンパイルします。 (g77とclコマンドは動作することが 確認出来ています。) 簡単なソースとコンパイル方法を教えて 頂きたくお願いします。

  • C++の関数をfortranから呼びたい。(g++, g77)

    C++の関数をfortranから呼びたい。(g++, g77) いつもお世話になっています。 現在WindowsXPにMinGWというソフトを入れて C++のコンパイルはg++を Fortranのコンパイルはg77を 使用しています。 (いずれも動作は確認できています。) 現在、以下のようなソースを使用して fortranからC++関数を呼ぼうとしていますが できておりません。 ソース内容、コンパイル方法に問題があれば ご指摘頂きたくお願いします。 ■C++ソース #include <stdio.h> #include <iostream> extern "C" void funcHelloC_(); void funcHelloC_(void) { printf("hello C world!\n"); } ■fortranソース    write(*,*) "Hello Fortran World."    call funcHelloC()    end ※実際のソースの各文先頭には、半角スペース6つ分が  記述しています。 ■コンパイル手順 D:\C>g++ -c funcHelloC.cpp D:\C>g77 -c helloFortran.f D:\C>g77 helloFortran.o funcHelloC.o helloFortran.o(.text+0x51):helloFortran.f: undefined reference to `funchelloc_' funcHelloC.o(.text+0xd):funcHelloC.cpp: undefined reference to `_ZNKSs4sizeEv' funcHelloC.o(.text+0x60):funcHelloC.cpp: undefined reference to `_ZNKSsixEj' funcHelloC.o(.text+0x9e):funcHelloC.cpp: undefined reference to `_ZNKSsixEj' funcHelloC.o(.text+0xcc):funcHelloC.cpp: undefined reference to `_ZNKSsixEj' funcHelloC.o(.text+0x12f):funcHelloC.cpp: undefined reference to `_ZNSt8ios_base4InitC1Ev' funcHelloC.o(.text+0x14a):funcHelloC.cpp: undefined reference to `_ZNSt8ios_base4InitD1Ev'

  • C++でのエラー LNK2001

    C++でプログラミング中ビルドしたところ以下のようなエラーが出ました。解決方法がわかりません。どのようにしたら解決できるのでしょうか? ---------------------------------------------------------------- コンパイル中... sample01.cpp リンク中... sample01.obj : error LNK2001: 外部シンボル "__imp__dispose_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_copyright_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_version_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__initialize_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__close_reader_writer" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_last_error_types" は未解決です Debug/Sample01.exe : fatal error LNK1120: 外部参照 6 が未解決です。 link.exe の実行エラー

  • FortranからCの関数を呼ぶ方法

    お世話になります。 標記件、以下の通り行っていますがうまくいきません。どなたかご存知の方おりましたらご教示下さい。よろしくお願いします。 (1)環境 ・Windows XP SP2 ・Compaq Visual Fortran Professional Edition 6.5.0 ・Visual C++ 6.0 Enterprise Edition (2)作業方法 ・Visual C++ を立ち上げ、その中でCプログラムとFortranプログラムのファイルを作成し、作業。 (3)現象 ・ビルドしようとすると以下のエラーが発生し、EXEが作成されない。 ------------------------------- Linking... LINK : warning LNK4098: defaultlib "libc.lib" conflicts with use of other libs; use /NODEFAULTLIB:library test01.obj : error LNK2001: unresolved external symbol _TEST@0 Debug/system.exe : fatal error LNK1120: 1 unresolved externals -------------------------------  ・個々のファイルのコンパイルは問題なし。 (4)ソース内容  --- Fortranプログラム"test01.f90" --- PROGRAM FileRW call test END  --- Cプログラム"system.cpp" --- #include <stdio.h> void test_(void) { printf("TEST PROGRAM!!"); } 以上

  • DB2付きのC言語がコンパイルできません。

    CはMicrosoftVisualStudio2012 DBはIBM DB2 です。 同じ環境でコンパイル実行できていたのに、 PCがおかしくなったのでフォーマットして入れなおしたらコンパイルができなくなりました。 よろしくおねがいします。 ソースはこちらです。 #include <stdio.h> exec sql include sqlca; void main() { exec sql connect to sample; if(SQLCODE!=0) { printf("SQL CONNECT %d", SQLCODE); } else { exec sql update Test1 set col2 = 'bababa'; if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE); } exec sql connect reset; } コンパイルコマンドです db2 connect to sample db2 prep Test11.sqc bindfile db2 bind Test11.bnd cl -Z7 -c -W2 -D_X86_=1 -DWIN32 -I"c:\Program Files\IBM\SQLLIB\include" Test11.c link -debugtype:cv -outTest11.exe %1.obj "c:\Program Files\IBM\SQLLIB\lib\db2api.lib" エラーメッセージです Test11.obj : error LNK2019: 未解決の外部シンボル _sqlaaloc@16 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlacall@20 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlasetdata@24 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastop@4 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastrt@12 が関数 _main で参照されました。 Test11.exe : fatal error LNK1120: 5 件の未解決の外部参照

  • CとFORTRANのリンクについて

    C/C++(MAIN)とFORTRAN(SUB)のリンク時エラーの対応策をご教授願いたい 環境(WIN2000/Visual Studio .NET 2003統合環境/IntelFortran9.0/にて FORTRAN(SUB)をLIBとして、C/C++プロジェクトにてリンクしようとして 参照エラーが多発する  ▼問題のリンクエラーメッセージ--------------------------------- error LNK2019: 未解決の外部シンボル _for_emit_diagnostic が関数 _input で参照されました。 同上 _for_open が関数 _input で参照されました。 同上 _f_ldnint_val が関数 _ransu で参照されました。 その他、同上エラーが多発 -------------------------------------------------------------- 多分、FORTRAN側のライブラリ関係が、Cリンカーに設定できていないのでは と推測し検討中だが、手がかりがつかめない状態です 何かヒントでもあれば幸いです。

  • このエラーは??

    コンパイラーすると次のようなエラーがでました。 a.obj : error LNK2019: 未解決の外部シンボル _printfが関数_mainで参照されました。 a.exe : fatal error LNK1120: 外部参照1が未解決です。 このエラーはなんでしょうか??よろしくお願いします。

  • DXライブラリ3DをVisual C++2008EEに導入したい!

    ・・・のですが、導入方法が間違えたのか、あるいはどこか欠けていたのか、訳の分からないエラーが発生しました。僕はこれを見ても何処が間違えたのかがさっぱりです。一体どこに・・・? ちなみに、普通のDXライブラリと同じやり方で導入しました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: long __thiscall myLib_c::ScreenFlip(void)" (?ScreenFlip@myLib_c@@QAEJXZ) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: long __thiscall myLib_c::DrawTeapot(struct D3DXVECTOR3,struct D3DXVECTOR3,float,float,struct _LCOLOR,bool)" (?DrawTeapot@myLib_c@@QAEJUD3DXVECTOR3@@0MMU_LCOLOR@@_N@Z) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: long __thiscall myLib_c::SetCamera(struct D3DXVECTOR3,struct D3DXVECTOR3)" (?SetCamera@myLib_c@@QAEJUD3DXVECTOR3@@0@Z) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: enum G::KeyType_e __thiscall myLib_c::GetKey(void)" (?GetKey@myLib_c@@QAE?AW4KeyType_e@G@@XZ) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: long __thiscall myLib_c::DrawCameraPoint(float,float,unsigned long,bool)" (?DrawCameraPoint@myLib_c@@QAEJMMK_N@Z) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: long __thiscall myLib_c::AdjustFPS(int)" (?AdjustFPS@myLib_c@@QAEJH@Z) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: unsigned long __thiscall myLib_c::CLS(unsigned long)" (?CLS@myLib_c@@QAEKK@Z) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: long __thiscall myLib_c::MessageProcess(void)" (?MessageProcess@myLib_c@@QAEJXZ) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2019: 未解決の外部シンボル "public: long __thiscall myLib_c::Init(struct HWND__ *)" (?Init@myLib_c@@QAEJPAUHWND__@@@Z) が関数 _WinMain@16 で参照されました。 3dlib.obj : error LNK2001: 外部シンボル ""class myLib_c mL" (?mL@@3VmyLib_c@@A)" は未解決です。 C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\xxx3d\Debug\3d.exe : fatal error LNK1120: 外部参照 10 が未解決です。 と出ました。 あと、入れたソースは #include "DxLib.h" int DxMain() { if ( FAILED( mL.Init() ) ) //ライブラリの初期化処理 return -1; VECTOR3 EyePoint( 0, 0, -4 ); //カメラのある座標(視点) VECTOR3 LookAtPoint( 0, 0, 0 ); //カメラが見つめる座標(注視点) // ウィンドウのメッセージ処理を行い、エラーが無い限りループ while ( SUCCEEDED( mL.MessageProcess() ) ) { mL.CLS(); //画面をクリア mL.AdjustFPS(60); //FPSを調整 mL.DrawCameraPoint( 10, 10 ); //カメラ座標を描画 // キー入力 switch ( mL.GetKey() ){ case G::KEY_UP: EyePoint.y++; break; //上キー case G::KEY_DOWN: EyePoint.y--; break; //下キー } mL.SetCamera( EyePoint, LookAtPoint ); //カメラをセット mL.DrawTeapot( VECTOR3( 0, 0, 0 ) ); //ティーポットを描画 mL.ScreenFlip(); //裏画面を表画面に反映 } return 0; } ・・・です。