2009-05-28 108 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()

可能有几个原因,包括(但当然不限于):

  • 他们真的不见了,也许你忘了对一个目标文件被发现链接
  • 命名空间防止现有的功能
  • 资源库路径
  • 编组或外部名称的问题,并强调

没有更多细节,很难说清楚。