• 締切済み

シンボルに@n接尾辞がついているライブラリへのリンク(Fortran)

インテル fortran Windows版 ver.11を使用しています。 あるライブラリを使用したf90のプログラムをビルドしようとしています。 コンパイルは通っているのですが、 リンクする際にシンボルが見つからずにリンクエラーとなってしまいます。 call func(varA, varB) のソース二対して、 LNK2019: 未解決の外部シンボル_FUNCが参照されました。 というような具合です。 ライブラリの中身を見てみると(nmコマンド) _FUNC@8 のようなシンボルが定義されているのですが、 一方でインテルコンパイラは _FUNC というシンボルを検索しているので未解決となってしまっているようです。 インテルのコンパイラオプション等でこのような@nの接尾辞がついたシンボルを 正しく検索、リンクできるようにする方法はないでしょうか? (サブルーチン名に@8を含めてしまうというのも一つの手段ですが、 @が予約語であるため、サブルーチン名に使用することができません。) ご存じの方がいらっしゃいましたら、ご教授いただけば幸いです。 よろしくお願いいたします。

みんなの回答

  • nineexit
  • ベストアンサー率100% (8/8)
回答No.1

MKLを利用されているのでしょうか? 見当違いかもしれませんが、コンパイルオプションが正しくない可能性があります。 私もifort(Linux版)を利用していますが、コンパイルはできるが実行できないという経験をしたことがあります。 そのときは、コンパイルオプションを変更して解決した記憶があります。 参考になれば幸いです。

関連するQ&A

  • スタティックリンクライブラリで2重リンクできる?

    スタティックリンクライブラリで2重リンクをしようとすると、warning LNK4006が発生してしまいます。 メッセージ: "~で定義されています; 2 つ目以降の定義は無視されます" 例えば、 aaa.libがbbb.libとccc.libをリンクしてて、bbb.libとccc.libはそれぞれddd.libをリンクしているとします。*.libはすべてスタティックリンクライブラリで提供を考えています。   [ aaa.lib ]    |   | [bbb.lib] [ccc.lib]   |     | [ddd.lib] [ddd.lib] 調べてみると「ライブラリーを結合する時に,このエラー・メッセージが表示された場合,ライブラリーに既に存在しているシンボルを追加しようとしています。」ということで、要は"ddd.lib"が重複してリンクされているという事のようなのですが、原因ばかりで解決策が分かりません。 LNK4006の解決法が分かれば良いのですが、最終的にはこの構成で"aaa.lib"だけで提供するようなライブラリを作成したいです。実現するためにはどのようにしたら良いのでしょうか?アイデアを頂けたら助かります。また詳しい方がいらっしゃいましたらご教授お願いいたします! ※Windows2000でVisualStadio.NET2003を使用してます。

  • 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リンカーに設定できていないのでは と推測し検討中だが、手がかりがつかめない状態です 何かヒントでもあれば幸いです。

  • CLIでのライブラリのリンク方法について

    VS2003のManagedC++では簡単にすることができたネイティブなライブラリを、VS2005のC++/CLIで利用することができません。 VS2003では、ファイルのインクルード、インクルードパスの追加、ライブラリのリンク、ライブラリパスの追加を行うと正しくリンクすることができたライブラリを、同じ方法でリンクしようとすると、VS2005ではコンパイルに失敗します。 ネイティブなライブラリをリンクするので、/clr:pureモードではなく、/clrモードにすればできると思い、試してみたのですが、 error LNK1314: COFF シンボル テーブルが壊れているか、または無効です。未定義のスタティック シンボルまたはラベル シンボルです。 というエラーが起きてコンパイルすることができません。 clrモードのほかに何か設定すべき項目があるのでしょうか。

  • 外部シンボルについて

    リンク中... session.obj : error LNK2001: 外部シンボル "_bcopy" は未解決です session.obj : error LNK2001: 外部シンボル "_bzero" は未解決です Debug/session.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー VC++を使用しましてビルドとコンパイルをしますと上記のようなエラーがでます。ライブラリのリンク不足なのでしょうか?どのファイルを使用すればいいかわかりません。宜しくお願いします。

  • エラーでリンクができません(VC++)。「外部シンボル

    error LNK2001: 外部シンボル "_IID_IAutoComplete2" は未解決です error LNK2001: 外部シンボル "_CLSID_AutoComplete" は未解決です error LNK2001: 外部シンボル "_IID_IAutoComplete" は未解決です これら3つのエラーが出るためビルドに失敗します(コンパイルは成功しますがリンクに失敗します)。 MSDNによると #include "shldisp.h" #include "shlguid.h" が必要とあるのでincludeしています。VC++上でこのヘッダーファイル上で右クリックをして現れたメニューからファイルを開くと、この中にはきちんと「IID_IAutoComplete2」などが定義されています。またこれらのヘッダーファイルはPlatformSDK 20002年10月版 を使用しています。 MSDNにはshell32.dllのVer5.0以上が必要と書かれていますが、使用しているOSにインストールされているshell32.dllはver6.00.2600.0000です。 #include "shlguid.h"に含まれている以下の行をコピーしてソースに貼り付けると2つ目のエラーはなくなります。 DEFINE_GUID(CLSID_AutoComplete, 0x00BB2763L, 0x6A77, 0x11D0, 0xA5, 0x35, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62); 環境は Windows XP InternetExplorer 6.0 Visual C++ 6.0 SP5 PlatformSDK(2002/10)(CoreSDK) PlatformSDK(2002/10)(InternetSDK) です。 何が原因でリンクできないのでしょう??まったくお手上げな状態です。分かる方がいましたらよろしくお願いします。

  • ライブラリファイルのリンク (リリースバージョン時)

    VisualC++ 2005 Express Editionでライブラリファイル(.lib)をリリースバージョンでビルトし、違うプログラム(デバックバージョン)でライブラリファイルをリンクしたとき 1>コンパイルしています... 1>main.c 1>リンクしています... 1>CheckMemory.lib(check_memory.obj) : MSIL .netmodule または /GL を伴ってコンパイルされたモジュールが見つかりました。/LTCG を使用して再開始してください。リンカのパフォーマンスを向上させるためには、コマンドラインに /LTCG を追加してください。 1>LINK : warning LNK4075: /INCREMENTAL は /LTCG の指定によって無視されます。 1>LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 と出るのですが、これはどうゆうことなのでしょうか? 分かる方いらっしゃいますか?お願いします。 ちなみにライブラリファイルは簡易メモリチェックプロブラムでデバック時のみ使用したいと考えているプログラムです。 使用言語はc言語です。 文章下手ですみません^^;

  • 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 の実行エラー

  • 静的リンクライブラリについて

    WindowsのライブラリにDLLやLIBといった形式があり、それぞれ「動的リンクライブラリ」「静的リンクライブラリ」となっていますが、 静的リンクライブラリとしてビルドされたライブラリを、動的に実行プログラムにリンクさせることは(Cやアセンブラなどの)実装次第で可能なのでしょうか? ビルド時にリンカがやってくれてることを実行時に行えればOK・・・という素直な話ではないのでしょうか。DLLも実行時にGetProcAddress()などを使ってアドレス解決をするわけですし、LIBでも同じことをするのは不可能ではないのでは?と思ったのです。 ※動的/静的リンクの概念や具体的な使用方法などはネット上で調べることができましたが、中身にまで踏み込んだ解説をしているページには巡り合えませんでした。そういう具体的な解説のあるページの紹介だけでもとても助かります。また、「根本的に思い違いをしてるんでは?」というご指摘も非常に助かります。 ※私自身↑に対する需要はないのでコスト・メリットとかは度外視です。興味本位というやつです。 ※別段、Windowsやライブラリの形式にこだわりがあるわけではないですが、これが一番メジャーだろう、ということでWindowsのDLL/LIBを対象に質問させて頂きました。 よろしくお願いします。

  • FORTRANのエラーメッセージで・・・

    フォートランのコンパイルで,どうも各サブルーチンとメインとのつながりがおかしいらしく下のようなメッセージが出てきます. Lbie2.obj : error LNK2001: 外部シンボル "_DOMEIN@8" は未解決です Debug/Lbie2.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー いったいこのエラーメッセージから何が読み取れるのかさっぱりです. 助けてください.

  • Fortranのバージョンアップと古いソースコード

    Fortranは科学技術計算の古い資産が使えるということでまだ使われていると思います。 しかも、コンパイラ・リンカは製品としてバージョンアップしているわけですが、新しくなっても古いコードはコンパイル・リンク・実行できると思っていました。最近、intel fortranの更新をしたのですが、動作がかなり違ってきました。F77,F90,F95などの更新ではなく、intel社の製品としての最新版への更新です。コンパイル・リンクまでは行くのですが、実行させたとたん、ゼロ割のようなメッセージが出て、実行が打ち切られてしまいます。1時間ぐらい走るプログラムなのですが、1秒で打ち切りでした。必ずそうなるということではありません。特定のライブラリで生じます。そのライブラリは古い(言語としてはF77)ので当然ながら新しいコンパイラで動くなどと書いていません。ただソースコードの塊であり、古いコンパイラでは動いていたのです。古いと行っても2009年ぐらいに買ったintel visual fortran ver.11ぐらいのもので2016年のコンパイラと大幅な変更はないはずなのですが。例えば最新版(2016年2月時点)の方は並列関係の設定の方がデフォルトで並列計算しない設定をコンパイラオプションで指定しないとおかしくなるということでしょうか(たぶんGPUには対応していないと思いますが)。どっかに書いてあるかなと思案していますが。 何か心当たりがあればよろしくお願いします。

専門家に質問してみよう