none
スタティックライブラリのリンクができない RRS feed

  • 質問

  • 表題の件で困っています。

    自作したスタティックライブラリとヘッダファイルを、DirectXのインクルードディレクトリと、ライブラリディレクトリに置き、プログラムの作成をしようとしました。

    DirectXのライブラリとヘッダファイルは問題なく利用できているのですが、自作したライブラリを利用しようとすると次のようなエラーが出ます。

    error LNK2019: 未解決の外部シンボル__imp__InternetReadFile@16 が関数 "int __cdecl GetWebFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char * *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?GetWebFile@@YAHV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAPAD0@Z) で参照されました。

     

    なぜサブルーチンを持つライブラリを指定できないのか見当がつきません。

    これはリンク方法が悪いのでしょうか?それともライブラリ作成時点でのビルドオブションに問題があったのでしょうか?

    どなたかご享受下さい、よろしくお願いします。

    2011年9月7日 0:11

回答

すべての返信

  • Windows APIのInternetReadFile()を参照されているようですが。リンク先にありますように、実行時にはWininet.dllが必要になるため、リンク時にはWininet.libを指定する必要があります。
    2011年9月7日 0:37
  • ご回答頂きありがとうございます。

    InternetReadFileなど、wininet.libが必要な関数群をコメントアウトした所、改善できました。

    #pragma comment(lib,"MyLib.lib") とリンクしたら無事動いたのですが、

    VC++ディレクトリの設定でパスを通し、#pragma~をコメントアウトしたら

     

    error LNK2019: 未解決の外部シンボル "int __cdecl ToInt(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?ToInt@@YAHV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) が関数 "public: void __thiscall CArchive::LoadData(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?LoadData@CArchive@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z) で参照されました。

     

    と出ました。ディレクトリ設定のみで.libを利用できるようにしたいのですが(boostやDirectXのように)どのようにしたら良いのでしょうか。

    2011年9月7日 3:01
  • InternetReadFileなど、wininet.libが必要な関数群をコメントアウトした所、改善できました。

    なぜコメントアウトするのですか? 不要な関数なのですか?

    と出ました。ディレクトリ設定のみで.libを利用できるようにしたいのですが(boostやDirectXのように)どのようにしたら良いのでしょうか。

    boostやDirectXの場合、ヘッダーファイル内に #pragma comment(lib,~) が書かれているはずです。同じようにしたいのであれば、自作のヘッダーファイル内にも#pragma ~ を書くといいでしょう。
    2011年9月7日 3:50