linker — неопределенная ошибка ссылки, когда я использую объединенную статическую библиотеку 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

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

0

Другие решения

Других решений пока нет …