Неопределенная ошибка ссылки при использовании объединенной статической библиотеки C++

Предположим, что мне нужно libA.a в моем приложении. libA.a нужен сам libB.a, и мне нужно статически связать их с обоими в моем приложении. Чтобы устранить это, я объединяю эти два (libA.a и libB.a), чтобы получить libAB.a (это делается с помощью инструмента ar). Нет проблем еще.

Когда я хочу запустить свое приложение (которое связано с libAB.a), компилятор начинает жаловаться на неопределенные ссылки на методы в libA, которые используют libB! Когда я связываю приложение с libB.a в дополнение к libAB.a, все в порядке! По размерам файлов кажется, что libAB.a является результатом слияния libA и libB, но во время компиляции кажется, что только libA доступна для приложения.

Вот команда слияния:

ar rcus -v ../lib/libPocoFoundationmtd.a @"Foundation.txt" "c:/MinGW/lib/libiphlpapi.a"

Foundation.txt содержит список файлов.o, которые создадут файл.a. И вот команда компиляции для моего приложения:

g++ -o ./Debug/exe1 @"exe1.txt" -L. -Lc:/poco/lib/  -lPocoFoundationmtd

1 ответ

Решение

Кажется, я нашел решение! Я смешивал.o и.a файлы вместе (объектные файлы + статические библиотеки) внутри объединенного.a файла. Я сделал ar-x, чтобы извлечь содержимое файла.a, а затем слил все файлы.o в одну окончательную библиотеку merged.a

Извините за задержку:)

Другие вопросы по тегам