का उपयोग करते हुए डुप्लिकेट क्लास नामों के साथ पुस्तकालयों को जोड़ना क्या जीसीसी के लिए एक ही नाम के साथ कक्षाओं वाले पुस्तकालयों को जोड़ने के दौरान चेतावनी उत्पन्न करने का कोई तरीका है? उदाहरण के लिएजीसीसी
Port.h
class Port {
public:
std::string me();
};
Port.cpp
#include "Port.h"
std::string Port::me() { return "Port"; }
FakePort.h
class Port {
public:
std::string me();
};
FakePort.cpp
#include "FakePort.h"
std::string Port::me() { return "FakePort"; }
main.cpp
#include "Port.h"
int main() {
Port port;
std::cout << "Hello world from " << port.me() << std::endl;
return 0;
}
बिल्डिंग
# g++ -c -o Port.o Port.cpp
# ar rc Port.a Port.o
# g++ -c -o FakePort.o FakePort.cpp
# ar rc FakePort.a FakePort.o
# g++ -c -o main.o main.cpp
# g++ main.o Port.a FakePort.a
# ./a.out
Hello world from Port
बदलें पुस्तकालय आदेश
01 जब तक दूसरा एक जो शामिल हो जाता है एक वस्तु फ़ाइल में शामिल है एक प्रतीक दो अलग पुस्तकालयों जीसीसी पहले एक यह पाता है का उपयोग करें और एक दूसरे पर ध्यान नहीं देगा में परिभाषित किया गया हैहैं:
# g++ main.o FakePort.a Port.a # ./a.out Hello world from FakePort
this page के अनुसार किसी अन्य कारण के लिए।
तो उपर्युक्त व्यवहार समझ में आता है। दुर्भाग्य से मैं एक बड़े कोड बेस को विरासत में मिला हूं जो नामस्थानों का उपयोग नहीं करता है (और उन्हें जोड़ना अभी संभव नहीं है) और कई पुस्तकालयों में कुछ सामान्य वर्ग नामों का उपयोग करता है। मैं यह सुनिश्चित करने के लिए लिंक समय पर स्वचालित रूप से डुप्लिकेट नामों का पता लगाना चाहता हूं कि कक्षा की गलत प्रति गलती से तत्काल नहीं हो रही है। कुछ ऐसा:
# g++ -Wl,--warnLibraryDupSymbols main.o FakePort.a Port.a
Warning: Duplicate symbol: Port
लेकिन मुझे ऐसा करने के लिए जीसीसी लिंकर विकल्पों में कुछ भी नहीं मिला। क्या जीसीसी को स्वचालित रूप से ऐसे मामलों की पहचान और रिपोर्ट करना संभव है?
संबंधित: http://stackoverflow.com/questions/10671956/same-class-name-in-different-c-files – oliver