Я намагаюся скомпілювати свою програму, а вона видає цю помилку:
usr/bin/ld: cannot find -l<nameOfTheLibrary>
у своєму makefile я використовую команду g++
і посилання на свою бібліотеку, яке є символічним посиланням на мою бібліотеку, розташовану в іншому каталозі.
Чи є можливість додати, щоб це працювало, будь ласка?
Щоб зрозуміти, що шукає компонувальник, запустіть його в словесному режимі.
Наприклад, я зіткнувся з такою проблемою при спробі скомпілювати MySQL з підтримкою ZLIB. Під час компіляції я отримував ось таку помилку:
/usr/bin/ld: cannot find -lzlib
Я трохи погуглив і продовжував натрапляти на різні проблеми такого ж роду, де люди говорили, що потрібно переконатися, що файл
В інтернеті я натрапив на іншу статтю, яка пропонувала запустити make з LD_DEBUG=all:
LD_DEBUG=all make
Хоча я отримав ТОННУ налагоджувальних результатів, насправді це не допомогло. Це додало більше плутанини, ніж будь-що інше. Тож, я вже збирався здатися.
Потім у мене було прозріння. Я подумав, що треба перевірити текст довідки для команди ld:
ld --help
Звідти я зрозумів, як запустити ld у розгорнутому режимі (уявіть собі це):
ld -lzlib --verbose
Ось що я отримав на виході:
==================================================
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libzlib.a failed
attempt to open /usr/local/lib64/libzlib.so failed
attempt to open /usr/local/lib64/libzlib.a failed
attempt to open /lib64/libzlib.so failed
attempt to open /lib64/libzlib.a failed
attempt to open /usr/lib64/libzlib.so failed
attempt to open /usr/lib64/libzlib.a failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.so failed
attempt to open /usr/x86_64-linux-gnu/lib/libzlib.a failed
attempt to open /usr/local/lib/libzlib.so failed
attempt to open /usr/local/lib/libzlib.a failed
attempt to open /lib/libzlib.so failed
attempt to open /lib/libzlib.a failed
attempt to open /usr/lib/libzlib.so failed
attempt to open /usr/lib/libzlib.a failed
/usr/bin/ld.bfd.real: cannot find -lzlib
Дзень, дзень, дзень...
Отже, щоб нарешті виправити це, щоб я міг компілювати MySQL з моєю власною версією ZLIB (а не з комплектною):
sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so
Вуаля!
Якщо ім'я вашої бібліотеки скажімо libxyz.so
і вона розташована на шляху скажімо:
/home/user/myDir
то зв'яжіть її з вашою програмою:
g++ -L/home/user/myDir -lxyz myprog.cpp -o myprog