Проблемы при включении (связывании) статической библиотеки внутри другой
-
07-07-2019 - |
Вопрос
Я постараюсь вкратце объяснить, что я хочу сделать:
Проект, использующий статическую библиотеку, у которой есть другая в качестве depandency.Это создает проект под названием MyProject, связывающий на MyLib1 ссылку на MyLib2.Вот порядок компиляции:
- MyLib2
- MyLib1 (ссылка на MyLib2)
- MyProject (ссылка на MyLib1)
Я использую Visual Studio 2008, и у меня возникли некоторые проблемы с определением include.При связывании я использую свойство "Дополнительный каталог включения" (в свойстве проекта C / C ++ node).Кажется, это работает между MyProject и MyLib1, но не MyLib1 и MyLib2.Например,:У меня есть файл в MyLib2, который называется foo.cpp;Использование #include "foo.cpp" заставляет visual studio сообщать, что foo.cpp неизвестно (отсутствует файл или папка).
Чтобы убедиться, что это НЕ неправильный путь, который я указал, я предпринял много попыток, например, следующих:скопируйте и вставьте путь, указанный в командной строке (используемый для компиляции библиотеки), в win Explorer:Я хорошо вижу исходный код моей второй библиотеки.Я переделывал проект много раз, и каждый раз я использовал разные имена (что заставляет меня обратить на это внимание), и все кажется четко определенным (но не "включая").
Единственный способ, который я действительно нахожу, заставить это работать:использование #включить "c:\\foo.cpp " как включить...Очень хорош для переносимости!
Вот Zip-файл решения, чтобы протестировать его самостоятельно и сказать мне, что не так: MyProject.rar
Спасибо , что нашли время помочь мне !Люсиберад
Решение
Во-первых, никогда не включайте файлы *.cpp.
Во-вторых, используйте прямое объявление ваших внешних функций:
void appellib2(void);
void appellib1(void)
{
appellib2();
}
В-третьих, щелкните правой кнопкой мыши каждый проект в Обозревателе решений и выберите "Зависимости проекта ..." и настройте соответствующие зависимости:MyProject -> MyLib1 -> MyLib2.
Наконец, в свойствах для MyProject настройте дополнительные зависимости MyLib1.lib.
Теперь я могу создать и запустить ваш проект без ошибок.
Обновить
Никогда не переименовывайте *.cpp в *.h только для решения проблем со связыванием.Если у вас есть определение в вашем файле * .h, вы не сможете включить его дважды или более.
Вот ваш проект YourProject.rar.
Другие советы
Я изменил .cpp на .h.Я знаю, что мне никогда не приходилось включать CPP-файл, но это было сделано с целью тестирования.
Я добавил прототип каждой функции, но он работает не лучше (он не включает файл mylib2.cpp прототип лучше, но бесполезен в этом тесте).
Я настроил зависимости проекта.Это все равно терпит неудачу.
Я настроил дополнительные зависимости MyLib1.lib для MyProject (я думаю, что это была следующая ошибка, которую я смог бы найти, создающая ошибку связывания a).
С этими изменениями я все еще получаю ошибку включения mylib2.h:такого файла или каталога нет.
Вот новый архив: MyProject.rar
Если вы добьетесь, чтобы это заработало, можете ли вы предоставить мне архив рабочего решения?
Спасибо, Люсиберад.