如果我在目標文件和庫中定義了相同的符號,GNU鏈接器將從目標文件中獲取符號。考慮下面這個例子:多個已定義符號的C/C++鏈接器順序
g++ -L"dir/to/lib" -o Executable Test.o foo.o -lMyLib
如果我在兩個Foo.cpp中和源文件「MyLib中」定義的函數foo
具有相同簽名的編譯,GNU鏈接總是喜歡從以前如果一個我使用這個命令。
此行爲是GNU工具鏈特有的嗎?你是否知道其他鏈接器的行爲方式相同?這是隨處可見的(GNU文檔,C++標準)?我找不到任何東西...
我想使用此功能來取代/模擬某些功能,同時進行單元測試(又名鏈接縫)。
目標文件形成可執行文件。這些庫然後用於**解決任何未定義的符號**。因此可執行文件將提供所有主要功能。對於任何未解決的符號,它們來自哪裏將嚴重依賴於MyLib(和其他庫)是靜態還是動態。對於靜態庫,它是很好的定義。對於動態庫,它依賴於運行時動態鏈接器,並且它在每個操作系統上都有所不同。 – 2011-12-15 17:03:30