ページ 11

自作スタティックライブラリの追加について

Posted: 2017年1月30日(月) 22:08
by Mokutsuno
お世話になっています。
VisualStudio2015Community、C++の環境で
画像ファイルを読み込みを行う関数を纏めたAのスタティックライブラリを作ったのですが、
そのライブラリはlibPngというライブラリを使っています(ライブラリを使う、の適切な言葉がわかりません)
そして、自作のライブラリはビルドが通り、そのライブラリをBのプロジェクトに追加したのですが、
Aのライブラリを追加しビルドすると、libPng側のヘッダファイルがディレクトリにない旨のエラーが
出ました。(include ファイルを開けません。'pnglibconf.h':No such file or directory)

追加、とは(「追加の依存ファイル」にA.libのあるフォルダのパスを、
「追加のインクルードディレクリ」、及び「追加のライブラリディレクトリ」にAのヘッダファイル、.libのあるフォルダのパスを指定し、A.hをincludeした状態です。

そこで質問です。BプロジェクトにAライブラリを追加するときには、Aが依存関係(正しい使い方かわかりません)にあるlibPngライブラリのヘッダファイルもBプロジェクトの「追加の依存ファイル」に追加しなければならないのでしょうか?

Noである場合は、なぜこのエラーが出るのか助言をお願いします。

libPngのほうはAのライブラリでディレクトリを正しく指定してある(Aのビルドではエラーなし)ので、AのライブラリをBのプロジェクトに追加しても問題ないと思ったのですが...なにか不備があるのだと思います
必要な情報があれば追記いたします。

Re: 自作スタティックライブラリの追加について

Posted: 2017年1月30日(月) 22:51
by みけCAT
Visual Studioは詳しくないので、予想で答えます。
Mokutsuno さんが書きました: そこで質問です。BプロジェクトにAライブラリを追加するときには、Aが依存関係(正しい使い方かわかりません)にあるlibPngライブラリのヘッダファイルもBプロジェクトの「追加の依存ファイル」に追加しなければならないのでしょうか?
いいえだと思います。
Mokutsuno さんが書きました: 追加、とは(「追加の依存ファイル」にA.libのあるフォルダのパスを、
「追加のインクルードディレクリ」、及び「追加のライブラリディレクトリ」にAのヘッダファイル、.libのあるフォルダのパスを指定し、A.hをincludeした状態です。
と書かれているので、「追加の依存ファイル」はヘッダファイルではなくライブラリがあるフォルダのパスを入れる場所であると予想できます。
Aライブラリを他のプログラム(例えばBプロジェクト)から使うためのヘッダが今回のようにlibPng(原文ママ。libpngではないのか?)のヘッダに依存しているのであれば、
libPng(原文ママ)のヘッダがあるディレクトリも「追加のインクルードディレクリ」(原文ママ。ディレクリではなくディレクトリではないのか?)に追加するべきであるように思えます。
逆に、Aライブラリを他のプログラムから使うためのヘッダがlibPng(原文ママ)など他のライブラリのヘッダに依存していないのであれば、
他のライブラリのヘッダやそれがあるディレクトリをプロジェクトの設定に追加する必要はないだろうと思います。

Re: 自作スタティックライブラリの追加について

Posted: 2017年1月31日(火) 01:36
by Mokutsuno
返信ありがとうございます。
libpng、ディレクトリ、でした。失礼いたしました。
みけCAT さんが書きました:libPng(原文ママ)のヘッダがあるディレクトリも「追加のインクルードディレクリ」(原文ママ。ディレクリではなくディレクトリではないのか?)に追加するべきであるように思えます。
たしかに、libpngに依存しているのでヘッダファイルを追加するべきでした。
「追加のインクルードディレクトリ」にlibpngのヘッダファイルを追加したところ、ビルドが通りました。
大変ありがとうございました。