2013-12-11 5 views
0

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

/usr/lib/libstreamanalyzer.so.0: undefined reference to `[email protected]_2.4.30' 
/usr/lib/libstreamanalyzer.so.0: undefined reference to `[email protected]_2.6.1' 
/usr/lib/libstreamanalyzer.so.0: undefined reference to `[email protected]_2.4.30' 

Это кажется запутанным. Предполагается, что линкер ищет символы в объектах, а не имена библиотек, но, похоже, в этом случае те, которые перед @ являются именем функции/символом, а LIBXML2_2.6.1 - это имя библиотеки. А для динамической библиотеки версия версии sonate x.y.z должна иметь значение только в стадии динамической компоновки, то есть когда исполняемый файл действительно выполняется.

Так что же означает эта ошибка, и какая часть вышеуказанных допущений неверна?

Edit:

Проблема возникает после установки libxml2 2.7.8. Он исчез после того, как libxml2 обновлен до 2.9.1.

ответ

1

Когда я компиляции нового программного обеспечения, я обнаружил кучу ошибок

Нет, ты не сделал. Вы столкнулись с ошибками, когда ссылки, которая отличается от компилятором.

компоновщик должен искать символы в объекты

UNIX линкеры также искать символы в библиотеках (как архив и общий).

LIBXML2_2.6.1 это имя библиотеки

Нет, это не так. Это символ версии, который отражается в библиотеке, в которой был определен этот символ.

Так что же эта ошибка на самом деле означает

Эта ошибка означает, что: когда libstreamanalyzer.so.0 был связан, он был связан с библиотекой (скорее всего libxml2.so), предоставившей версионируются символы [email protected]_2.4.30 и т.д.

Теперь вы связываете свой бинарный файл с какой-то другой версией libxml2, которая делает не, и эти двоичные файлы не будут работать.

+0

OK. Таким образом, это «функция» GNU и не является частью стандартного * C * или * C++ *. – WiSaGaN

+1

Стандартные 'C' или' C++ 'не имеют понятия исходного файла, объектного файла или библиотеки. Но да: версированные символы - это расширение GNU для POSIX. –

+0

Оба стандарта C и C++ имеют нечто, называемое * Standard Library * afaik. – WiSaGaN

Смежные вопросы