Двойная ссылка на дополнительную библиотеку в решении, состоящем из множества проектов? - PullRequest
1 голос
/ 16 января 2020

Я новичок в c ++ (переход с python). У меня есть два проекта в моем решении (Visual Studio 2019):

  1. библиотека stati c (назовем это «myLib»), которая зависит от библиотеки повышения.
  2. приложение (назовем его «myApp»), которое ссылается на myLib.

Когда я собираю myLib, все идет хорошо. Однако, когда я пытаюсь построить myApp, я получаю следующую ошибку:

Код серьезности блочной цитаты Описание Ошибка состояния подавления строки файла проекта LNK1104 не может открыть файл 'libboost_date_time-vc142-mt-gd-x64-1_72. lib 'app C: \ Users \ [myName] \ Documents \ git_projects \ [projectName] \ app \ LINK 1

Я знаю, что речь идет о компоновщике, который не может найти ссылку на библиотеку надстройки поэтому, когда я снова связываю библиотеку boost из myApp, она собирается без ошибок. Тем не менее, мой вопрос: почему я должен ссылаться на повышение дважды? 1. в myLib мне нужно ссылаться на boost; 2. В myApp мне также нужно добавить ссылку на boost, хотя myApp уже ссылается на myLib. Я подумал, что если я укажу на boost в myLib, а затем я ссылаюсь на myLib из myApp, можно будет построить все без ошибок. Может ли кто-нибудь объяснить мне, если это возможно, что myApp ссылается только на myLib без ссылки на повышение?

1 Ответ

0 голосов
/ 22 января 2020

Когда вы создаете библиотеку, другие библиотеки не связаны между собой. Это сделано специально, вы должны использовать специальные инструменты, если вы хотите связать библиотеку с другой библиотекой. Удалите зависимость для boost lib, когда вы создадите свою библиотеку, и она все равно будет хорошо скомпилирована. С библиотекой в ​​качестве цели и без расширенных зависимостей библиотеки.

#include <boost/date_time.hpp>
void test_call() {
    boost::gregorian::date the_date;
}

Затем приложение. И даже если указана библиотека date_time, заголовок не такой:

#pragma comment(lib, "C:\\cpp\\boost_1_70_0\\stage\\lib\\libboost_date_time-vc142-mt-gd-x32-1_70.lib")
#pragma comment(lib, "C:\\cpp\\ConsoleTest\\Debug\\testing.lib")

void test_call();

int main(){
    test_call();
}

Причина заключается в том, что если библиотеки libs включены в другие библиотеки, будет много раздувания кода. Это предотвращает ненужное дублирование кода.

...