संपादित करें: मुझे गार्ड शामिल करने के बारे में पता है, लेकिन इसमें समस्याएं शामिल हैं। मैं वास्तविक संकलित और पहले से जुड़े कोड के बारे में बात कर रहा हूं जो स्थैतिक पुस्तकालय में बेक्ड हो जाता है।सी ++ पुस्तकालयों का उपयोग करते समय एक ही कोड सहित कैसे बचें?
मैं सी ++ में अपने लिए एक सामान्य उद्देश्य उपयोगिता पुस्तकालय बना रहा हूं।
मैं जो फ़ंक्शन बना रहा हूं, printFile
, string
, cout
और मानक लाइब्रेरी के ऐसे अन्य सदस्यों की आवश्यकता है।
मैं चिंतित हूँ कि जब पुस्तकालय संकलित किया गया है, और फिर एक और परियोजना है कि यह भी string
और cout
, string
और cout
के लिए कोड का उपयोग करता दोहराया जाएगा से जुड़ा हुआ: यह दोनों पुस्तकालय द्विआधारी कार्यक्रम है में prelinked हो जाएगा इसके साथ जुड़ा हुआ है, और यह फिर से परियोजना से जुड़ा होगा जो स्वयं का उपयोग करता है।
पुस्तकालय इस तरह संरचित है:
- एक
libname.hpp
फ़ाइल प्रोग्रामर जो लाइब्रेरी का उपयोग करता अपनी परियोजनाओं में#include
माना जाता है नहीं है। - प्रत्येक कार्य के लिए
fname
libname.hpp
में घोषित किया गया है, इसमें एक फ़ाइलfname.cpp
लागू है। - सभी
fname.cpp
फ़ाइलें भी#include "libname.hpp"
। - लाइब्रेरी स्वयं
libname.a
में संकलित है जिसे/usr/lib/
पर कॉपी किया गया है।
क्या यह भी होगा?
यदि हां, तो क्या यह एक समस्या है?
यदि हां, तो मैं इससे कैसे बच सकता हूं?
ठीक है, मैं समझता हूं। हालांकि, "इस से कैसे बचें" मेरे प्रश्न का एक बड़ा हिस्सा है। – corazza
अब मुझे एहसास हुआ कि मैं दो अलग-अलग मुद्दों को मिला रहा था: कोड डुप्लिकेशन और मानक लाइब्रेरी क्लास लेआउट। दूसरा एक मुद्दा नहीं है यदि आप अपने प्रोग्राम को उसी कंपाइलर के साथ संकलित कर रहे हैं जिसका उपयोग आप लाइब्रेरी को संकलित करने के लिए करते थे, जो आपका मामला प्रतीत होता है। पहले के रूप में, इसका परिणाम बड़ा कोड हो सकता है लेकिन वास्तव में अन्यथा कोई समस्या नहीं है। – user1610015