Вновь установленные библиотеки gcc (libexpat1-dev) не распознаются в текущем терминале (debian) - PullRequest
2 голосов
/ 13 марта 2012

Я потратил довольно много времени, пытаясь заставить скомпилировать пример программы на основе экспатов.

Я получал следующее сообщение об ошибке при попытке скомпилировать

gcc -Wall -lexpat line.c -o blah 
line.c: In function ‘main’:
line.c:99:8: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘XML_Size’ [-Wformat]
/tmp/ccUa3vfD.o: In function `printcurrent':
line.c:(.text+0x42): undefined reference to `XML_SetDefaultHandler'
line.c:(.text+0x4d): undefined reference to `XML_DefaultCurrent'
line.c:(.text+0x60): undefined reference to `XML_SetDefaultHandler'
/tmp/ccUa3vfD.o: In function `main':
line.c:(.text+0x162): undefined reference to `XML_ParserCreate'
line.c:(.text+0x1ad): undefined reference to `XML_UseParserAsHandlerArg'
line.c:(.text+0x1c9): undefined reference to `XML_SetElementHandler'
line.c:(.text+0x1dd): undefined reference to `XML_SetCharacterDataHandler'
line.c:(.text+0x1f1): undefined reference to `XML_SetProcessingInstructionHandler'
line.c:(.text+0x2b2): undefined reference to `XML_Parse'
line.c:(.text+0x2c2): undefined reference to `XML_GetErrorCode'
line.c:(.text+0x2ca): undefined reference to `XML_ErrorString'
line.c:(.text+0x2d8): undefined reference to `XML_GetCurrentLineNumber'
collect2: ld returned 1 exit status

Я уже выполнил следующие команды: sudo apt-get install expat libexpat1 libexpat1-dev libxmltok1-dev

Так что я целую вечность бездельничал, пытаясь убрать сообщение об ошибке, чтобы я мог скомпилировать эту (простую) небольшую программу, но безрезультатно.

В конце концов из-за случайности я решил переключиться на виртуальный терминал.

Я выполнил точно такую ​​же команду, на этот раз она работала без проблем.

Может кто-нибудь сказать мне, почему это? Есть ли что-то, что мне нужно запустить, чтобы обновить пути к библиотекам?

1 Ответ

4 голосов
/ 09 мая 2012

Строка компоновщика (т. Е. Флаги, которые вы задаете с помощью -l и ваши имена входных файлов), зависит от порядка.Библиотеки используются только для определения функций, используемых слева, но не справа.Использование:

 gcc -Wall line.c  -lexpat -o blah

См. Вопрос библиотека связана, но ссылка не определена для получения дополнительной информации.

...