Компиляция / связывание g с использованием флага -m32 в 64-битной системе -> вручную добавить ldl?

#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.