Предположим, у меня есть эта иерархия папок:
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 $@ $^
[list_of_obj_files]
? - person 眠りネロク   schedule 18.01.2018[list_of_obj_files_that_were_created_on_this_dir]
— это ваша интерпретация того, что делается. Каковы факты, то есть фактические неотредактированные команды? - person n. 1.8e9-where's-my-share m.   schedule 18.01.2018ar r
не создает весь архив с нуля, а только заменяет или добавляет указанные элементы. - person n. 1.8e9-where's-my-share m.   schedule 18.01.2018