Как объединить библиотеки в Linux

Недавно я хотел создать игровой движок с использованием C++ и glfw3. Я хочу создать статическую библиотеку libengine.a и связать ее с libglfw3.a и ее зависимостями. Мой вопрос в том, как я могу заменить это:

# add paths. use pkg-config --static --libs glfw3 to 
# find libraries for your specific system
glfw_libs:=\
        /usr/local/lib/libglfw3.a\
        /usr/lib/x86_64-linux-gnu/librt.a\
        /usr/lib/x86_64-linux-gnu/libm.a\
        /usr/lib/x86_64-linux-gnu/libdl.a\
        /usr/lib/x86_64-linux-gnu/libX11.a\
        /usr/lib/x86_64-linux-gnu/libpthread.a\
        /usr/lib/x86_64-linux-gnu/libxcb.a\
        /usr/lib/x86_64-linux-gnu/libXau.a\
        /usr/lib/x86_64-linux-gnu/libXdmcp.a

lib:= $(glfw_libs)
...
...
$(library): $(obj)
    ar rs $@ $^ $(lib)

с чем-то вроде этого:

glfw_libs:=/usr/local/lib/libglfw3.a\
        -lrt -lm -ldl -lX11 -lpthread -lxcb -lXau -lXdmcp

lib:= $(glfw_libs)
...
...
$(library): $(obj)
    ar rs $@ $^ $(lib)

person Dragomir    schedule 16.01.2020    source источник
comment
См. это сообщение.   -  person alteredinstance    schedule 16.01.2020
comment
Разве это не сработает, если вы просто удалите строку lib:= $(glfw_libs) и замените список явных имен именами -l, и все готово? Если вы готовы перечислить -lXdmcp в командной строке, вы на самом деле не хотите создавать единую библиотеку, содержащую это и все остальные, что является хорошей вещью™. Вероятно, вы могли бы указать и -lglfw3; есть большая вероятность, что компилятор (компоновщик) все равно ищет в /usr/local/lib.   -  person Jonathan Leffler    schedule 16.01.2020
comment
Нет, это не так, потому что ar жалуется на -llibname, в нем говорится о неизвестной опции, поэтому мне пришлось использовать полные имена, но я не удовлетворен таким подходом и не смог найти ничего, связанного с этой проблемой.   -  person Dragomir    schedule 16.01.2020