Помогите с сообщением об ошибке от gcc - PullRequest
1 голос
/ 28 мая 2009

Есть идеи об этой ошибке?

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

Ответы [ 2 ]

4 голосов
/ 28 мая 2009

Это простая ошибка компоновки. Вы вызываете две функции uart_setup() и uart_cleanup(), которые компоновщик не находит.

Может быть несколько причин, включая (но, конечно, не ограничиваясь):

  • Они действительно отсутствуют, возможно, вы забыли связать один объектный файл
  • Пространство имен, не позволяющее найти существующую функцию
  • Библиотечные пути
  • Маршаллинг или проблемы с внешними именами и подчеркиванием

Без подробностей трудно сказать наверняка.

1 голос
/ 28 мая 2009

Это означает, что xtmpmain.c вызывал функции с именами uart_setup() и uart_cleanup(), но компоновщик их не нашел. Вам, вероятно, нужно включить библиотеку или реализовать эти функции для Windows в терминах Win32 API.

Вот некоторые из них: «это включено в вопросы»:

  • Объявлены ли функции?
  • Определены ли функции (т.е. реализованы)?
  • С такими же именами?
  • Были ли эти определения исключены препроцессором?
  • Существует опция gcc, которая контролирует наличие или отсутствие начального подчеркивания. Вы случайно не использовали это для одного файла, а не для других, верно?
  • Проверьте объявленное соглашение о вызовах. __cdecl и __stdcall очень разные животные. Они обычно выдают несоответствующие экспортированные имена символов для безопасности, и эта ошибка может быть симптомом этого.

Если это проект переноса, то вполне вероятно, что исходная реализация функции, связанной с UART, написана в зависимости от платформы. В этом случае они часто будут защищены #ifdef некоторой формы, которая зависит от платформы времени компиляции.

Чтобы решить эту проблему, вам необходимо реализовать их для этой платформы в стиле, совместимом с их использованием в остальной части приложения, и аналогичным образом защищенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...