Проблемы с включением (связыванием) статической библиотеки в другую - PullRequest
0 голосов
/ 14 сентября 2009

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

Проект, использующий статическую библиотеку, в которой другая находится в качестве depandency. Он создает проект под названием MyProject linking на MyLib1, связывающий MyLib2. Вот порядок компиляции:

  • MyLib2
  • MyLib1 (ссылка на MyLib2)
  • MyProject (ссылка на MyLib1)

Я использую Visual Studio 2008, и у меня есть некоторые проблемы с определением include. При связывании я использую свойство «Дополнительный каталог включения» (в узле свойства проекта C / C ++). Кажется, это работает между MyProject и MyLib1, но не MyLib1 и MyLib2. Например: у меня есть файл в MyLib2 с именем foo.cpp; Использование #include "foo.cpp" заставляет Visual Studio сообщать, что foo.cpp неизвестен (отсутствует файл или папка).

Чтобы убедиться, что это НЕ неправильный путь, который я указал, я сделал много попыток, таких как: скопируйте и вставьте путь, показанный в командной строке (используется для компиляции библиотеки) в win explorer: я хорошо вижу исходный код моего вторая библиотека. Я много раз переделывал проект, и каждый раз я использовал разные имена (заставляя меня обращать на это внимание), и все, кажется, хорошо определено (но не «включая»).

Единственный способ заставить его работать: использовать #include "c: \\ foo.cpp" как include ... Очень хорошо для переносимости!

Вот Zip решения, чтобы протестировать его самостоятельно и сказать, что не так: MyProject.rar

Спасибо, что нашли время помочь мне! Lucyberad

Ответы [ 2 ]

1 голос
/ 14 сентября 2009

Во-первых, никогда не включайте * .cpp файлы.

Во-вторых, используйте предварительное объявление ваших внешних функций:

void appellib2(void);

void appellib1(void)
{
    appellib2();
}

В-третьих, щелкните правой кнопкой мыши каждый проект в обозревателе решений и выберите «Проектные зависимости ...» и настройте правильные зависимости: MyProject -> MyLib1 -> MyLib2.

Наконец, в свойствах для MyProject установите дополнительные зависимости MyLib1.lib.

Теперь я могу собрать и запустить ваш проект без ошибок.

UPDATE

Никогда не переименовывайте * .cpp в * .h только для решения проблем с линковкой. Если у вас есть определение в файле * .h, вы не сможете включить его дважды или более.

Вот ваш проект YourProject.rar .

0 голосов
/ 14 сентября 2009

Я изменил .cpp на .h. Я знаю, что никогда не включал файл CPP, но это было для целей тестирования.

Я добавил прототип каждой функции, но она не работает лучше (в нее не входит файл mylib2.cpp, прототип лучше, но не полезен в этом тесте).

Я установил зависимости проекта. Это все еще терпит неудачу.

Я установил дополнительные зависимости MyLib1.lib для MyProject (я думаю, что это была следующая ошибка, которую я смогу найти, создавая ссылку на ошибку).

С этими изменениями я все еще получаю сообщение об ошибке mylib2.h: такого файла или каталога нет.

Вот новый архив: MyProject.rar

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

Спасибо, Lucyberad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...