Visual Studio — Почему я не могу использовать C ++ Eigen (lib только для заголовков) в двух консольных приложениях в рамках одного решения MS VS?

Я создал визуальное решение Microsoft с двумя проектами консольных приложений. Я могу использовать библиотеку Eigen в одном проекте, просто объявив ее в свойствах следующим образом:

$ (ProjectDir) Эйген \ eigen3;

Я могу использовать библиотечные структуры, такие как «Eigen :: Vector3d» и т.д. без проблем.
Теперь, когда я пытаюсь скопировать только заголовочную библиотеку во вторую папку проекта и пытаюсь установить то же свойство для второй, и использую структуру, я получаю ошибки компиляции.

Затем, когда я не копирую папку Eigen во вторую и просто пытаюсь ссылаться со второй на папку в первой, я получаю другой набор ошибок времени компиляции.

$ (SolutionDir) someproject1 \ Эйген \ eigen3;

Ошибки во втором случае таковы:

c: \ users \ alam syed \ documents \ someproject2.h (11): ошибка C2653:
‘Eigen’: это не имя класса или пространства имен

C: \ Users \ Алам
syed \ documents \ someproject2.h (11): ошибка C2065: «Vector3f»: не объявлено
идентификатор

c: \ users \ alam syed \ documents \ someproject2.h (11): ошибка
C2923: ‘std :: vector’: ‘Vector3f’ не является допустимым аргументом типа шаблона
для параметра ‘_Ty’

c: \ users \ alam syed \ documents \ someproject2.h (11):
ошибка C2903: «распределитель»: символ не является ни шаблоном класса, ни
шаблон функции

c: \ users \ alam syed \ documents \ someproject2.h (11):
ошибка C3203: «распределитель»: неиспользуемый шаблон класса не может быть использован
в качестве аргумента шаблона для параметра шаблона _Alloc, ожидается
реальный тип

Почему не нормально, чтобы два проекта в одном решении пытались независимо иметь свои собственные библиотеки в своих папках проектов? Далее, почему я не могу отослать папку Eigen от одного к первому? Наконец, как мы можем обойти эту причудливую / нестандартную проблему?

1

Решение

Я только что проверил это, и это возможно в одном решении.

  • создал пустое решение
  • добавлены два консольных проекта
  • скопировал собственные заголовки из zip в каждый из двух проектов
  • переименовал их в eigen1 в первой папке проекта и eigen2 во второй папке проекта
  • создал два файла .cpp в каждом из проектов, используя учебный код из eigen docs
  • задавать ($ProjectDir)eigen1 как «Дополнительные каталоги включения» в первом проекте и
    ($ProjectDir)eigen2 во втором проекте
  • проверил встроенные отладочные файлы, если они ссылаются на правильные собственные заголовки в
    встроенная информация отладки

Это даже работает, если вы не переименовываете собственные папки.

Я могу думать только о двух причинах, почему вы хотели бы сделать это вместо использования common
каталогный подход:

  • каждый из проектов использует разные версии библиотек или вы хотите иметь
    гибкость для этого варианта позже
  • вы хотите использовать индивидуальные версии eigen (и / или других библиотек), применяя ваши
    собственные патчи
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]