#c #linux #g #32bit-64bit
#c #linux #g #32-битный-64-битный
Вопрос:
Это был долгий путь, но мне удалось включить общий файл (libpi_pi_gcs2.so ) включен в код C под 64-разрядной версией Linux Mint 17 Cinnamon. Теперь, когда пыль оседлана, у меня остался вопрос… позвольте мне подвести итог:
Я скопировал libpi_pi_gcs2.so в usr / local / lib.
Пытаюсь скомпилировать main.cpp с
g -Wall -o test main.cpp -lpi_pi_gcs2
сбой, возврат
/usr/bin/ld: skipping incompatible //usr/local/lib/libpi_pi_gcs2.so when searching for -lpi_pi_gcs2
/usr/bin/ld: cannot find -lpi_pi_gcs2
collect2: error: ld returned 1 exit status
Я поговорил со своим соседом по квартире, и он предположил, что, возможно, общая библиотека совместима только с 32 битами.
Использование -m32
позвольте мне сделать шаг вперед! Но приводит к новым ошибкам.
Я погуглил, и мне показалось, что мне нужны библиотеки C32 std. И я установил:
apt-get install ia32-libs
Снова старые сообщения об ошибках исчезли, и появилось новое, после поиска в Google, который я установил:
apt-get install g -multilib
Пытаюсь скомпилировать его сейчас, используя
g -Wall -o test -m32 main.cpp -lpi_pi_gcs2
Позвольте сообщениям об ошибках:
//usr/local/lib/libpi_pi_gcs2.so: undefined reference to `dlsym'
//usr/local/lib/libpi_pi_gcs2.so: undefined reference to `dlopen'
//usr/local/lib/libpi_pi_gcs2.so: undefined reference to `dlclose'
Решением была следующая команда:
g -Wall -o test -m32 main.cpp -lpi_pi_gcs2 -ldl
Теперь мой вопрос:
Необходимо ли явно указывать -ldl, т.Е. Связать с libdl.so поскольку флаг -m32 объявляет все, что следует, 32-битным, и, следовательно, компоновщик будет без явной записи -ldl искать 32-битный libdl.so ? Я предполагаю, что мой 64-разрядный, я работаю над 64-битной системой.
Что вы думаете? Приветствуется дополнительная информация и справочная информация.
Приветствую,
newandlost
Комментарии:
1. Я думаю
nm /usr/local/lib/libpi_pi_gcs2.so | grep dlsym
, показываетU dlsym
?2. вам всегда нужно явно указывать -ldl . Это не имеет ничего общего с переключателем -m32. В этом случае из-за -m32 компоновщик коммутатора будет связываться с 32-разрядными совместимыми libdl и libpi_pi_gcs2.