Проблемы при включении (связывании) статической библиотеки внутри другой

StackOverflow https://stackoverflow.com/questions/1419186

Вопрос

Я постараюсь вкратце объяснить, что я хочу сделать:

Проект, использующий статическую библиотеку, у которой есть другая в качестве 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

Если вы добьетесь, чтобы это заработало, можете ли вы предоставить мне архив рабочего решения?

Спасибо, Люсиберад.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top