2009-05-28 104 views
1

有關此錯誤的任何想法?幫助錯誤消息來自gcc

 
gcc -oxtmpmain.exe xtmpmain.o fiber_driver.o xtmp_options.o getopt.o D:\usr\xtensa\XtDevToolsDE\in 
stall\tools\RB-2008.4-win32\XtensaTools\lib\iss\xtmp.lib 
xtmpmain.o(.text+0x213):xtmpmain.c: undefined reference to `_uart_setup' 
xtmpmain.o(.text+0x2da):xtmpmain.c: undefined reference to `_uart_cleanup' 
collect2: ld returned 1 exit status 
make: *** [xtmpmain.exe] Error 1 

回答

1

這意味着xtmpmain.c調用的函數名爲uart_setup()uart_cleanup(),但它們未被鏈接器找到。您可能需要包含一個庫,或者根據Win32 API來實現Windows的這些功能。

一些 「是它的問題插入」 是:

  • 是函數聲明?
  • 函數是否定義(即實現)?
  • 正是這些名字?
  • 這些定義是否被預處理器排除?
  • 有是控制前導下劃線的存在或不存在一個gcc選項。你沒有意外地將它用於一個文件而不是其他文件,對嗎?
  • 驗證聲明的調用約定。 __cdecl__stdcall是非常不同的動物。爲了安全起見,它們通常會生成不匹配的導出符號名稱,並且此錯誤可能是其中的一個症狀。

如果這是一個移植項目,那麼與UART相關的函數的原始實現可能以平臺相關的方式編寫。在那種情況下,他們通常會被某種形式的#ifdef所保護,這取決於編譯時平臺。

要解決這一點,你需要實現他們的這一平臺,與他們的應用程序的其他部分使用一致,同樣守衛風格。

+0

怎麼樣?這兩個fns是我在xtmpmain.c中定義的 它與普通fns r8類似嗎? – 2009-05-28 09:15:14

4

這是一個明顯的鏈接錯誤。您正在調用鏈接器未找到的兩個函數,即uart_setup()uart_cleanup()

可能有幾個原因,包括(但當然不限於):

  • 他們真的不見了,也許你忘了對一個目標文件被發現鏈接
  • 命名空間防止現有的功能
  • 資源庫路徑
  • 編組或外部名稱的問題,並強調

沒有更多細節,很難說清楚。