Статическая библиотека, имеющая объектные файлы с таким же именем (ar)

Немного контекста. Допустим, у меня есть исходные файлы, которые должны оказаться в статической библиотеке. Допустим, есть два файла cpp a.cpp и a.cpp , расположенных в двух разных подкаталогах. Примерно так:

foo/a.h
foo/a.cpp
bar/a.h
bar/a.cpp

Их содержание не конфликтует и совершенно другое. Имена файлов такие же.

Теперь при компиляции я получаю, конечно, два файла ao .

gcc -c foo/a.cpp -o foo/a.o
gcc -c bar/a.cpp -o bar/a.o

Если я сейчас создаю статическую библиотеку с

ar rcs libfoobar.a foo/a.o bar/a.o

, я вижу оба файла внутри статическая библиотека, работающая под nm libfoobar.a . Вроде нормально.

Проблема

Проблема, которую я вижу, заключается в том, что я запускаю команду ar отдельно для foo / ao и bar / ao , помещая их в той же статической библиотеке. Теперь последний объектный файл перезапишет первый, поэтому при запуске nm libfoobar. a Я просто вижу последний объект в библиотеке. Я предполагаю, что это происходит из-за того же имени объектного файла.

При создании статической библиотеки с ar , всегда ли я должен комбинировать все объекты за один раз, или мне также хорошо запустить ar несколько раз собирать часть объектов за раз, и все они попадают в одну статическую библиотеку? В этом примере я вижу, что первое работает, но не второе.

Как все будет работать, если один a.cpp изменится, а статическая библиотека должна измениться? Найдет ли ar нужный a.cpp для изменения в библиотеке?

Это всего лишь небольшой пример, но рассмотрим большой проект с большим количеством файлов, некоторые из которых имеют такое же имя . Если вы сейчас хотите создать единую библиотеку, вы тоже можете столкнуться с этой ситуацией.

В общем, это просто плохая организация того, как составляются библиотеки, как файлы называются, или есть что-то еще, чтобы все работало?

9
задан osgx 5 February 2011 в 04:59
поделиться