GCC在鏈接包含具有相同名稱的類的庫時是否有辦法產生警告?例如使用GCC鏈接具有重複類名稱的庫
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
更改庫順序
# g++ main.o FakePort.a Port.a
# ./a.out
Hello world from FakePort
根據this page:
如果符號被在兩個不同的庫的gcc將使用它找到的第一個,並忽略第二個定義,除非所述第二個被包括在被包括在對象文件出於其他原因。
所以上述行爲是有道理的。不幸的是,我繼承了一個不使用命名空間的大規模代碼庫(並且現在添加它們是不可行的),並且在多個庫中使用了一些泛型類名。我想在鏈接時自動檢測重名,以確保類的錯誤副本不會意外地被實例化。就像:
# g++ -Wl,--warnLibraryDupSymbols main.o FakePort.a Port.a
Warning: Duplicate symbol: Port
但我找不到任何的GCC鏈接器選項來做到這一點。是否有可能讓GCC自動檢測並報告這種情況?
相關:http://stackoverflow.com/questions/10671956/same-class-name-in-different-c-files – oliver 2017-05-12 11:28:01