Как @bersh проницательно указывает в комментариях, Вы, кажется, смешиваете библиотеки, которые были скомпилированы для различной архитектуры (32-разрядный по сравнению с 64-разрядным). На Fedora 32-разрядные библиотеки входят /usr/lib
, в то время как 64-разрядные библиотеки входят /usr/lib64
. Можно убедить себя в этом с несколькими примерами.
Давайте выберем одну из библиотек доли для сопоставителя DNS, /usr/lib/libresolv-2.17.so
. Мы видим, что это - часть 32-разрядного об/мин.
$ rpm -qf /usr/lib/libresolv-2.17.so
glibc-2.17-20.fc19.i686
Можно также видеть, что библиотекой является 32-разрядный ELF headered файл.
$ file /usr/lib/libresolv-2.17.so
/usr/lib/libresolv-2.17.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=0xeee8b9e6cb49f8dd64059cc158ce2c55f8c6df5b, for GNU/Linux 2.6.32, not stripped
Таким образом, необходимо заботиться при компиляции программного обеспечения, чтобы удостовериться, что Вы имеете в распоряжении соответствующие библиотеки (32 и 64), а также соответствующие заголовочные файлы. На Fedora (и все основанные на Red Hat дистрибутивы) как пакеты называют так:
Если Вы замечаете, что файл библиотеки доступен в обеих архитектуре. Учитывая вывод Вашего kernel
так как пакет был бы x64, я предположил бы, что Вы означали устанавливать 64-разрядные версии библиотек.
Также, так как Вы пытаетесь скомпилировать, Вы захотите установить заголовочные файлы для своей архитектуры также.
$ rpm -qf /usr/lib/libdb-5.3.so
libdb-5.3.21-11.fc19.i686
$ rpm -qf /usr/lib64/libdb-5.3.so
libdb-5.3.21-11.fc19.x86_64
Если Вы видите, что Ваши компиляции призывают к файлам, которые Вы не имеете затем, можно использовать repoquery
для обнаружения то, как что пакет (пакеты) обеспечивает различные файлы так:
$ repoquery -f '*/libdb-5.3.so'
libdb-0:5.3.21-11.fc19.x86_64
libdb-0:5.3.21-11.fc19.i686
К счастью, мы можем попросить GNU Parallel повторить попытку, если команда не удастся: