C解决duplicate symbol
生活随笔
收集整理的這篇文章主要介紹了
C解决duplicate symbol
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
—2022-07-15 補充—
再次看這個問題很奇怪, #include 'HeadFile.h" 不是很常見的引入頭文件形式嗎?
如常見的 #include<stdio.h>,多個文件 include 也沒報錯啊。
原因: include的文件,如果只是方法聲明 ok。 但包含 方法定義,就報錯。
(好比,甲乙丙都說 我要丁幫忙,那ok。 但甲要高個子丁, 乙要矮個子, 丙要中等個子丁。 那肯定報錯,我們就一個丁)
Context
編譯報錯, a方法 duplicate symbol
實際報錯的log
上文的Context只是說明關系,swapElement就等于上文的a方法, MergeSort.cpp TestSort.cpp等價于SourFile1.cpp、SourceFile2.cpp
clang++ MergeSort.cpp TestSort.cpp -o testExecute duplicate symbol __Z11swapElementPiii in:/var/folders/wv/16gvb9rd4v540qx_6vry7vqh0000gn/T/MergeSort-dd8696.o/var/folders/wv/16gvb9rd4v540qx_6vry7vqh0000gn/T/TestSort-0defcb.o原因
- C++,方法不能被重復聲明。
- 編譯階段:#include “HeaderFile.h”,等于復制 HeaderFile.h 文件內容到 #include的位置。
- 編譯輸出:每個cpp文件被編譯成.o文件,所以MergeSort.o,TestSort.o文件內,都copy了HeaderFile.h內的內容(即方法聲明)
- 鏈接(Link)階段:鏈接每個.o文件成為最終的 可執行文件。鏈接MergeSort.o,TestSort.o,出現兩個方法聲明,異常報錯 duplicate symbol
3種解決方法:
源碼文件里,方法名稱 為symbol(符號),相對概念是 內存地址,如LOG方法在 內存中的地址是什么。
消除symbol
可見性
只在單個.o文件內可見
3. 將方法聲明為static(表示方法不能被share,生成的symbol只在文件內可見)
參考文檔
總結
以上是生活随笔為你收集整理的C解决duplicate symbol的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS 实现列表移动(JQuery实现)
- 下一篇: iphone ios 手势