Почему clang создает проблему связывания, когда присутствуют символы? - PullRequest
0 голосов
/ 22 октября 2018

У меня странная проблема с линковкой.У меня есть куча файлов, которые я пытаюсь скомпилировать, но я сталкиваюсь с неопределенной ошибкой символа.Ниже приведена ошибка:

clang U_outsup.o U_OUTSUR.o
Undefined symbols for architecture x86_64:
  "U_outsup(surface*, __sFILE*)", referenced from:
      U_outsur(surface*, char*) in U_OUTSUR.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

То же самое происходит, когда я пытаюсь скомпилировать исходные файлы в выходной исполняемый файл.Если я посмотрю на эти объектные файлы (clang -c U_outsup.c U_OUTSUR.C), я увижу следующее:

U_outsup.o:     file format Mach-O 64-bit x86-64

SYMBOL TABLE:
0000000000000420 l       __DATA,__data  _rname
0000000000000000 g     F __TEXT,__text  _U_outsup
0000000000000000         *UND*  _A_extcpc
0000000000000000         *UND*  _E_seterr
0000000000000000         *UND*  _U_issurr
0000000000000000         *UND*  _U_surbre
0000000000000000         *UND*  _fprintf

U_OUTSUR.o:     file format Mach-O 64-bit x86-64

SYMBOL TABLE:
0000000000000090 l       __DATA,__data  __ZL5rname
0000000000000000 g     F __TEXT,__text  __Z8U_outsurP7surfacePc
0000000000000000         *UND*  __Z8E_seterrlPc
0000000000000000         *UND*  __Z8U_outsupP7surfaceP7__sFILE
0000000000000000         *UND*  _fclose
0000000000000000         *UND*  _fopen

Итак, я предполагаю символ "U_outsup (surface *, __sFILE *)"не может быть найден, потому что у него есть смешное имя в таблице символов.Может кто-нибудь помочь мне понять, что здесь происходит?Еще раз спасибо.

1 Ответ

0 голосов
/ 22 октября 2018

У него нет смешного названия.У него есть искаженное имя c ++.

Это означает, что оно было построено с помощью компилятора c ++, а не ac.Перекомпилируйте библиотеку с помощью gcc или clang, а не g ++ или clang ++.

...