У меня есть набор статически скомпилированных библиотек с довольно глубокими зависимостями между библиотеками. Например, исполняемый X использует библиотеки A и B, A использует библиотеку C, а B использует библиотеки C и D:
X -> A
A -> C
X -> B
B -> C
B -> D
Когда я связываю X с A и B, я не хочу получать ошибки, если C и D также не были добавлены в список библиотек — тот факт, что A и B используют эти библиотеки внутри, является детальностью реализации, которая X не нужно знать. Кроме того, когда новые зависимости добавляются где угодно в дереве зависимостей, файл проекта любой программы, использующей A или B, должен быть переконфигурирован. Для дерева с глубокой зависимостью список требуемых библиотек может стать очень длинным и трудноподдерживаемым.
Итак, я использую настройку "Дополнительные зависимости" раздела "Библиотекарь" в проекте A, добавляя C.lib. И в том же разделе проекта B я добавляю C.lib и D.lib. Эффект от этого заключается в том, что библиотечные пучки C.lib в A.lib и C.lib и D.lib в B.lib.
Однако, когда я связываю X, оба A.lib и B.lib содержат свою собственную копию C.lib. Это приводит к появлению тонны предупреждений вдоль линий
A.lib(c.obj): предупреждение LNK4006 "символ" (_symbol), уже определенный в B.lib(c.obj); второе определение игнорируется.
Как я могу это сделать, не получая предупреждений? Есть ли способ просто отключить предупреждение или есть лучший способ?
РЕДАКТИРОВАТЬ. Я видел более одного ответа, в котором говорилось, что из-за отсутствия лучшей альтернативы я просто отключу предупреждение. Ну, это часть проблемы: я даже не знаю, как ее отключить!