編集:インクルードガードについて知っていますが、インクルードファイルはではなく、の問題です。私は、実際にコンパイルされ、すでにリンクされているコードについて、スタティックライブラリに焼き付けられていることについて話しています。C++ライブラリを使用するときに同じコードを含むことを避けるにはどうすればよいですか?
私は自分用の汎用ユーティリティライブラリをC++で作成しています。
私が作成している機能の1つであるprintFile
は、string
、cout
などの標準ライブラリのメンバーが必要です。
私はライブラリがコンパイルされ、その後もstring
とcout
を使用して、別のプロジェクトにリンクされている場合、string
とcout
のコードが複製されることを心配している:それは、両方のプログラムがあるライブラリのバイナリにプレリンクされますリンクされており、それ自体を使用するプロジェクトと再びリンクされます。
ライブラリは次のように構成されています
は- 1つの
libname.hpp
ファイル彼のプロジェクトで#include
になっているライブラリを使用して、プログラマがあります。 libname.hpp
で宣言されたすべての関数fname
には、ファイルfname.cpp
が実装されています。- すべて
fname.cpp
ファイル#include "libname.hpp"
もあります。 - ライブラリ自体は
libname.a
にコンパイルされ、/usr/lib/
にコピーされます。
これは起こりますか?
はいの場合は、まったく問題ですか?
はいの場合、どうすればこの問題を回避できますか?
OK、わかりました。しかし、 "これを避ける方法"は私の質問の大きな部分です。 – corazza
私は、コードの複製と標準ライブラリクラスのレイアウトという2つの異なる問題を混在させていたことに気付きました。ライブラリをコンパイルするのに使ったのと同じコンパイラでプログラムをコンパイルしているのであれば、2番目の問題は問題にはなりません。最初のコードでは、コードが大きくなる可能性がありますが、そうでなければ実際には問題にはなりません。 – user1610015