none
スタティックライブラリの参照箇所で、外部参照1が未解決ですのコンパイルエラーが発生する RRS feed

  • 質問

  • お世話になっております。

    Visual Studio 2010 MFCで開発中です。

    以前どなたかがC言語で作ったスタティックライブラリを参照しようとしていますが、下記のようなコンパイルエラーが発生します。

    DlgFFTCalc.obj : error LNK2019: 未解決の外部シンボル "int __cdecl fftcalc(int *,double *,double *,double *)" (?fftcalc@@YAHPAHPAN11@Z) が関数 "public: void __thiscall DlgFFTCalc::doCalcFFT(void)" (?doCalcFFT@DlgFFTCalc@@QAEXXZ) で参照されました。 : fatal error LNK1120: 外部参照 1 が未解決です。

    スタティックライブラリの登録は、次の手順で行いました。 ①追加のインクルードディレクトリにヘッダファイルのパスを設定 ②リンカーの追加のライブラリディレクトリにlibファイルの格納フォルダパスを設定 ③リンカーの追加の依存ファイルにlibファイルを設定

    設定したパスが間違っていないことは確認しております。

    また、このスタティックライブラリは、Visual Studio2005 で作成されたようですが、このライブラリを参照したサンプルプログラム(Visual Studio 2005 C言語)を、Visual Studio2010で開き、上記の①~③の設定を行い、ビルドしたところ、正常にコンパイルできました。

    MFCアプリケーションからこのライブラリを使用しようとするとうまくいきません。

    何かの設定が邪魔してるのかと調べているのですが、難航しております。

    ご存知の方がいらっしゃいましたら、ご教示いただけると助かります。

    よろしくお願いいたします。

    2013年8月30日 7:53

回答

  • 提供されたヘッダーファイルでの定義に extern "C" または、EXTERN_C の記述はありますか?

    もし、それがない場合は、インクルードしているヘッダーを

    extern "C"
    {
    #include "もらったヘッダー"
    }
    

    としてみてください。

    C言語で作成したということなので、C++で参照されることを想定したつくりになっていないのかもしれません。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    • 回答としてマーク arubi_momo 2013年9月2日 2:47
    2013年8月30日 8:52

すべての返信

  • 当該のスタティックライブラリを「StLib_A.lib」とすると、
    「StLib_A.lib」は、何らかの他のスタティックライブラリ
    「ExtLib_B.lib」などを参照している可能性があります。

    VS2005で、正常にビルドできる「サンプルプログラム」プロジェクトを開き、
    もう一度

     1.プロパティの「リンカ」の「入力」の「追加の依存ファイル」欄

    を確認してみたほうが良いと思います。。
    「StLib_A.lib」が外部の「ExtLib_B.lib」などを参照している場合でも、
    「StLib_A.lib」内に「ExtLib_B.lib」内の関数が取り込まれることがないためですね。

    わからない場合は、「追加の依存ファイル」欄のコピーを
    貼り付けてみてください。

    (加筆)後で考えると、とっちゃんさんの意見の方が可能性が高いですね。

    2013年8月30日 8:51
  • 提供されたヘッダーファイルでの定義に extern "C" または、EXTERN_C の記述はありますか?

    もし、それがない場合は、インクルードしているヘッダーを

    extern "C"
    {
    #include "もらったヘッダー"
    }
    

    としてみてください。

    C言語で作成したということなので、C++で参照されることを想定したつくりになっていないのかもしれません。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    • 回答としてマーク arubi_momo 2013年9月2日 2:47
    2013年8月30日 8:52
  • とっちゃん様、仲澤@失業者様

    ご返信、ありがとうございます。

    extern "C"で解決しました!

    おっしゃる通り、C++での参照を想定していなかったようです。

    恥ずかしながらC言語とのリンクの仕組を理解していなかったので、リンクエラーという発想には至りませんでした。

    本当に助かりました。ありがとうございます。

    C言語側でも、C++側でもextern ”C”が指定できるのですね。勉強になりました。

    2013年9月2日 2:47