none
libファイルの無視について RRS feed

  • 質問

  • Windows8でVisual Studio 2010 Professional C++ を使用しています.

    プロパティマネージャーで,下位の階層で設定したlibの読み込み設定を上位の階層で無効にする方法が有れば教えていただけないでしょうか?

    以下のように設定してビルドを試してみたのですが,ライブラリの読み込みを無効にすることはできませんでした.

    Debug|Win32

    └プロパティA:リンカー>入力>特定の規定のライブラリの無視:Test.lib(自作)を指定

     └プロパティB:リンカー>入力>追加の依存ファイル:Test.lib(自作)を指定

    LINK : fatal error LNK1181: 入力ファイル 'Test.lib' を開けません。

    以上よろしくお願いいたします.


    2014年7月9日 6:50

回答

  • /NODEFAULTLIB (ライブラリを無視する)/DEFAULTLIB (既定のライブラリの指定)を無視するものですから通常のライブラリに関しては効かないかと。

    回答ではなく私の場合はですが、リンカーオプションにライブラリを指定するのではなく、ライブラリを使用しているソースコード中に #pragma comment(lib, "Test.lib") を埋め込むようにしています。これであればライブラリを必要とする時にのみリンクされるため、上位の階層で無効にする等の対応は不要です。(comment

    また、ライブラリプロジェクトとそれを使用するプログラムのプロジェクトが同一のソリューションに含まれるのであれば、プロジェクトの参照を使います。参照をするとリンカーオプションで自動的にTest.libが加えられますし、プロジェクト間の依存関係も設定されリビルドなども連動します。

    • 回答としてマーク T.Serizawa 2014年7月9日 8:12
    2014年7月9日 7:23

すべての返信

  • /NODEFAULTLIB (ライブラリを無視する)/DEFAULTLIB (既定のライブラリの指定)を無視するものですから通常のライブラリに関しては効かないかと。

    回答ではなく私の場合はですが、リンカーオプションにライブラリを指定するのではなく、ライブラリを使用しているソースコード中に #pragma comment(lib, "Test.lib") を埋め込むようにしています。これであればライブラリを必要とする時にのみリンクされるため、上位の階層で無効にする等の対応は不要です。(comment

    また、ライブラリプロジェクトとそれを使用するプログラムのプロジェクトが同一のソリューションに含まれるのであれば、プロジェクトの参照を使います。参照をするとリンカーオプションで自動的にTest.libが加えられますし、プロジェクト間の依存関係も設定されリビルドなども連動します。

    • 回答としてマーク T.Serizawa 2014年7月9日 8:12
    2014年7月9日 7:23
  • まず、「下位」とはそのプロジェクトが依存しているプロジェクト
    という意味で良いでしょうか。

    「特定の規定のライブラリの無視」の「規定の」とは、
    VSにバンドルされているライブラリのことではないでしょうか。
    つまり、自前のLibは指定できなかったと思います。

    一般に、VS提供でないlibは、プロジェクトに特に指定しない限り、
    つまり、「リンカー」の「入力」の「追加の依存ファイル」に
    指定してない限り、そのライブラリ(Test.lib)はリンクされません。
    つまり何もしなければ自前のライブラリは無視されています。

    また、提示されたエラーの意味するところは
    「'Test.lib'が見つからないのでリンクの対象となりませんでした 」
    で、「追加の依存ファイル」に指定されたものに対してのエラーです。
    従って、主たる質問の内容「無視したい」と微妙に関連が無いように思います。

    総じて、もう少し細かい事情を説明された方が良いかもしれません。
    特に個々のプロジェクトの種類(exe/dll/lib)や、プロジェクト間の依存関係ですね。

    2014年7月9日 7:36
  • 佐祐理さん

    早速のご回答ありがとうございます.

    MSDNの/NODEFAULTLIB(ライブラリを無視する)のタイトルに惑わされ,解説の「既定のライブラリを 1 つ以上除外します」に気が付きませんでした.

    #pragma commentを使用して書き直したところ無事にビルドし実行することができました.

    今回はソリューションが別々であったため「プロジェクトの参照」を使用した方法は使えませんでしたが,今後同じソリューションで開発を行う場合はこの機能を活用してみたいと思います.

    お忙しいところご回答いただきありがとうございました.


    2014年7月9日 8:12
  • 仲澤@失業者さん

    ご回答ありがとうございました.

    /NODEFAULTLIBの有効範囲はVSにハンドルされているライブラリ+新しく追加したライブラリと思っておりました.

    >>総じて、もう少し細かい事情が説明された方が良いかもしれません。
    ご指摘ありがとうございます,簡潔な質問を心掛けたつもりですが裏目に出てしまったようで申し訳ございませんでした.
    今後の投稿では注意いたします.

    お忙しいところご回答いただきありがとうございました.
    2014年7月9日 8:27
  • まず、「下位」とはそのプロジェクトが依存しているプロジェクト
    という意味で良いでしょうか。
    プロパティマネージャーという部分が鍵だと思います。依存先のプロジェクトへとまたがる話題ではありません。
    2014年7月9日 8:34