Makefile - связывает статические библиотеки с динамической библиотекой
Предположим, у меня есть эта иерархия папок:
main
dir1
file1.cpp/h
file2.cpp/h
makefile
dir2
file3.cpp/h
makefile
makefile
Теперь каждый внутренний make-файл компилирует файлы в объектные файлы и создает статическую библиотеку (*.a).
Я хочу построить общий объект (динамическую библиотеку) из этих статических библиотек (назовем их libdir1.a, libdir2.a)
Я пробовал это правило на make-файле, но я принял эту ошибку:
CC = g++
LDFLAGS = -shared
TARGET = libprog.so
$(TARGET): file1.o file2.o file3.o
$(CC) $(LDFLAGS) -o $@ -Wl,-whole-archive -ldir1 -ldir2 -Wl,-no-whole-archive
(compiler output)
libdir2.a: member libdir2.a(file1.h) in archive is not an object
Я не знаю, происходит ли ошибка из-за неправильного построения архива или из-за неправильного целевого правила make-файла.
Каждый архив был построен с этим правилом:
$(TARGET): [list_of_obj_files_that_were_created_on_this_dir]
ar -r -o $@ $^
1 ответ
Проблема заключалась в том, что я случайно включил файл "h" в архив. Это было потому, что я использовал переменную для хранения объектного файла, но я не очень хорошо помещал в нее данные, поэтому я подумал, что переменная включает в себя только файлы.o, но на самом деле у нее тоже были файлы.h.