Хочется разобраться с темой компиляции и линковки в Си (вообще, и на linux в частности).
Для примера я сделал свою небольшую обертку над SDL2, которую хочу собрать в shared library.
Файлы библиотеки:
window.h и
window.c.
Файлы программы, к которой должна подключаться библиотека:
main.c.
Всё в одной директории.
Для демонстрации логики моих действий, приведу фрагмент из Makefile:
$(APP):
@./$(APP)
compile:
@$(CC) main.c window.c $(FLAGS) -lSDL2 -o $(APP)
build:
$(CC) window.c -c -fPIC
$(CC) window.o -shared -lSDL2 -o libwindow.so
$(CC) main.c -c -o main.o
$(CC) main.o -L. -lwindow -o $(APP)
Вариант с компиляцией программы в лоб (
compile:) работает как надо.
А вариант с созданием динамической библиотеки (
build:) и подключением ее к программе - не работает.
При попытке запуска программы, выводится:
./app: error while loading shared libraries: libwindow.so: cannot open shared object file: No such file or directory
Вопрос: Что я делаю не так? :)
p.s. гугля, находил предложения с
LD_LIBRARY_PATH=... . Но разве флаг
-L при компиляции не служит той же самой цели?