2014-12-02 75 views
-1

我想要編譯瑞薩和我得到以下錯誤:_FunctionName多重定義 它在我的.h文件中的一個人的聲明,並在我的C文件中的一個定義 符號和另一個在一個綜合圖書館(我沒有訪問它)我試圖刪除聲明,只留下定義,但這也沒有工作,我也有同樣的錯誤。 有沒有編譯命令可以忽略這個?瑞薩編譯錯誤符號_FunctionName多重定義

回答

1

你試圖用錯誤的方法解決它。每個符號必須有一個確切的定義。因此,如果庫中已有一個,請從您的代碼中刪除定義。您在.h文件中的聲明可幫助您訪問該變量。

所有這些假設您的聲明很好地反映了庫變量的類型和意圖。如果沒有,只需更改變量的名稱以避免與庫衝突。

1

你所描述的是一個鏈接器錯誤而不是編譯器錯誤。它不是由一個「綜合圖書館」清楚你的意思,但是當你鏈接的靜態鏈接庫,只有反對必要的代碼來解決均單獨編譯的目標代碼顯式鏈接解析的符號,因此通常是可以簡單地通過在自己的代碼中定義符號來重寫庫定義。

但是如果庫不夠精細,並在庫中的一個對象模塊包含多個公共符號,如果你引用一個,所有其他鏈接。因此,在這種情況下,如果_FunctionName在與_AnotherFunctionName相同的模塊中定義,並且您參考_AnotherFunctionName,那麼_FunctionName也將被鏈接並與您的覆蓋發生衝突。

理想庫應模塊化的,使得任何單一模塊只定義了一個公共接口 - 這樣你可以覆蓋任何單一接口。

一種可能的方案是,以確定哪些其它符號共享同一個對象模塊_FunctionName,然後定義那些太;但這可能很容易出錯並且很複雜。

簡單的解決方法是不使用相同的名稱,在庫中使用,但不會讓你的函數以取代這可能是你的意圖,在圖書館內對它所做的任何電話。