Я перекрестно компилирую общую библиотеку (miniweb) для чернового устройства beaglebone. Когда я компилирую без оптимизации, у меня нет проблем. Однако, если я компилирую с любыми оптимизациями (т.е. -O3
) я получаю следующее при попытке запустить мою программу:glibc не найден при включении оптимизаций компилятора
./myprogram: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.15' not found (required by /usr/lib/libminiweb.so)
Моего первый вопрос, почему позволят оптимизации внезапно привести свою программу в зависимости от этой библиотеки? Является ли контент статически включенным в библиотеку, когда оптимизация отключена?
Как определить версию библиотеки c, которую использует мой кросс-компилятор? Я запустить следующую команду ldd --version
на обеих системах:
рабочий стол:
$ ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
Copyright (C) 2014 Free Software Foundation, Inc.
beaglebone:
ldd --version
ldd (Debian EGLIBC 2.13-38+deb7u1) 2.13
Copyright (C) 2011 Free Software Foundation, Inc.
Очевидно, что библиотека у меня устарел, но как вы можете увидеть мои системные отчеты используя eglibc
вместо glibc
?
Как моя кросс-скомпилированная библиотека может зависеть от glibc
? Возможно, работает ldd
на моем рабочем столе, не является точным отражением библиотек, используемых моим кросс-компилятором?
Как я могу найти, какую библиотеку c использует мой кросс-компилятор?
Похоже, библиотека живет здесь '/ USR/рычажного линукс-gnueabihf/Библиотека/libc.so.6', но как я могу знаете, какая версия? – dtmland
@dtmland 'strings /usr/arm-linux-gnueabihf/lib/libc.so.6 | grep 'Библиотека GNU C. * версия''. –
Фантастический! 'GNU C Library (Ubuntu EGLIBC 2.19-0ubuntu2) - стабильная версия версии 2.19 от Roland McGrath и др. – dtmland