我想要編譯瑞薩和我得到以下錯誤:_FunctionName多重定義 它在我的.h文件中的一個人的聲明,並在我的C文件中的一個定義 符號和另一個在一個綜合圖書館(我沒有訪問它)我試圖刪除聲明,只留下定義,但這也沒有工作,我也有同樣的錯誤。 有沒有編譯命令可以忽略這個?瑞薩編譯錯誤符號_FunctionName多重定義
-1
A
回答
1
你試圖用錯誤的方法解決它。每個符號必須有一個確切的定義。因此,如果庫中已有一個,請從您的代碼中刪除定義。您在.h
文件中的聲明可幫助您訪問該變量。
所有這些假設您的聲明很好地反映了庫變量的類型和意圖。如果沒有,只需更改變量的名稱以避免與庫衝突。
1
你所描述的是一個鏈接器錯誤而不是編譯器錯誤。它不是由一個「綜合圖書館」清楚你的意思,但是當你鏈接的靜態鏈接庫,只有反對必要的代碼來解決後均單獨編譯的目標代碼顯式鏈接解析的符號,因此通常是可以簡單地通過在自己的代碼中定義符號來重寫庫定義。
但是如果庫不夠精細,並在庫中的一個對象模塊包含多個公共符號,如果你引用一個,所有其他鏈接。因此,在這種情況下,如果_FunctionName
在與_AnotherFunctionName
相同的模塊中定義,並且您參考_AnotherFunctionName
,那麼_FunctionName
也將被鏈接並與您的覆蓋發生衝突。
理想庫應模塊化的,使得任何單一模塊只定義了一個公共接口 - 這樣你可以覆蓋任何單一接口。
一種可能的方案是,以確定哪些其它符號共享同一個對象模塊_FunctionName
,然後定義那些太;但這可能很容易出錯並且很複雜。
簡單的解決方法是不使用相同的名稱,在庫中使用,但不會讓你的函數以取代這可能是你的意圖,在圖書館內對它所做的任何電話。
相關問題
- 1. 編譯時錯誤:多重定義「主」
- 2. gfortran編譯錯誤:體系結構x86_64的未定義符號
- 3. 編譯錯誤:對未定義的符號搬遷R_X86_64_PC32
- 4. 編譯錯誤osx上的「未定義的符號」
- 5. objective c未定義符號編譯錯誤
- 6. Centos中未定義的符號錯誤編譯
- 7. 編譯器錯誤:架構x86_64的未定義符號
- 8. 編譯器錯誤E2451未定義的符號在函數main()
- 9. 帶班薩斯編譯錯誤
- 10. 編撰錯誤「未定義的符號」
- 11. C++鏈接錯誤,符號重定義
- 12. 「錯誤 - 符號'tr'有多個定義。」
- 13. 鏈接錯誤:未定義符號,其中很多(cpp交叉編譯)
- 14. 符號多重定義
- 15. Arduino IDE編譯器錯誤多重定義
- 16. 未定義符號錯誤
- 17. msbuild,定義條件編譯符號
- 18. 未定義條件編譯符號
- 19. 編譯Caffe:未定義符號_H5LTfind_dataset
- 20. 編譯時未定義mpi_win_allocate_shared的符號
- 21. 無法編譯GLFW,未定義符號
- 22. 編譯錯誤:「找不到符號」
- 23. Java編譯錯誤,找不到符號
- 24. 編譯時找不到符號錯誤。
- 25. 編譯錯誤:找不到符號
- 26. JAVA_HOME定義錯誤編譯時出錯
- 27. 編譯apache時出錯,「未定義符號:未定義符號:」_ apr_dir_read $ INODE64「...... ld:符號未找到」
- 28. C++多重定義錯誤
- 29. 「的......多重定義」錯誤
- 30. C多重定義錯誤