gcc -I/home/me/lib/ -O3 -Wall -c -fmessage-length=0 -olibToMake.o ../libToMake.c
gcc -L/home/me/lib/ -shared -olibToMake.so libToMake.o -lrequestedLib
При построении 64-битных разделяемых библиотек на x86_64
обычно требуется флаг -fPIC
, или вы получаете recompile with -fPIC
ошибка во время ссылки на совместно используемую библиотеку.
Поскольку вы не использовали -fPIC
, но ваша ссылка была успешной, вы, вероятно, используете (не по умолчанию) gcc
, который нацелен на i*86
(то есть, производит 32-битный выход).Вы можете подтвердить это, запустив file libToMake.so
.
Вы не показали ту команду, что на самом деле терпит неудачу (та, которая вызывает cannot find -lrequestedLib
ошибку).Я предполагаю, что , команда использует другой gcc (по умолчанию?), Который нацелен на x86_64
.Если она выглядит примерно так:
gcc main.c -L/home/me/lib -lrequestedLib
, эта команда будет игнорировать /home/me/lib/librequestedLib.so
(поскольку вы не можете связать 32-битный и 64-битный код) и продолжит поискlibrequestedLib
в другом месте.Когда он не может найти 64-битную версию librequestedLib
, он выдаст сообщение об ошибке, которое вы получаете.