編集: インクルード ガードについては知っていますが、インクルード ファイルはここでは問題になりません。私が話しているのは、静的ライブラリに焼き付けられる、実際にコンパイルされ、すでにリンクされているコードです。
私は C++ で自分用の汎用ユーティリティ ライブラリを作成しています。
私が作成している関数の 1 つは、printFile、 requires string、coutおよび標準ライブラリの他のメンバーです。
ライブラリがコンパイルされてから、 and も使用する別のプロジェクトにリンクされるstringと、とcoutのコードが複製されるのではないかと心配しています。プログラムがリンクされているライブラリバイナリで両方が事前にリンクされ、それら自体を使用するプロジェクトと再びリンクされます。stringcout
ライブラリは次のように構成されています。
libname.hppライブラリを使用するプログラマーがプロジェクトで使用することになっているファイルが 1 つあります#include。fnameで宣言されたすべての関数に対して、それを実装libname.hppするファイルがあります。fname.cpp- すべての
fname.cppファイルも#include "libname.hpp". libname.aライブラリ自体は にコピーされてコンパイルされ/usr/lib/ます。
これは起こりますか?
はいの場合、それはまったく問題ですか?
はいの場合、どうすればこれを回避できますか?