Линкер не распознает некоторые #include? - PullRequest
1 голос
/ 10 сентября 2011

У меня есть решение VC ++ с несколькими проектами и несколькими пространствами имен.Каждый проект имеет свое собственное пространство имен, а некоторые проекты имеют несколько пространств имен.

Иногда, когда я ссылаюсь на объект из другого проекта, я получаю ошибки «неразрешенный внешний символ», даже если я # включил файл заголовка иссылался на объект через его пространство имен (Namespace :: object).Чтобы избавиться от ошибок компоновщика, я должен также #include файл cpp, затем я получаю предупреждения, что символ был определен дважды.

Это очень хакерский, и я не люблю хакерский.

Я знаю, что мне нужно пройти и посмотреть на все включаемые зависимости, поскольку что-то явно испорчено, но я неНа данный момент не удалось найти каких-либо серьезных проблем.

В то же время, есть ли у кого-нибудь какие-либо предложения относительно каких-либо очевидных проверок или общих причин этой проблемы?

Ответы [ 3 ]

4 голосов
/ 10 сентября 2011

«неразрешенные внешние символы» - это ошибки linker .И связывание не заботится о том, что включается #inc (не, если не вовлечены #pragmas).Все, что касается ссылок, - это то, с чем вы явно заявляете, что ссылаетесь.

Те другие проекты, которые вы пытаетесь использовать, должны создавать библиотеку или что-то еще, когда вы их компилируете, верно?Вы должны ссылаться на них в настройках вашего проекта.

2 голосов
/ 10 сентября 2011

Если вы используете Visual C ++, перейдите в свойства своего проекта в поле Linker > Input, вы должны добавить скомпилированный .lib файл проекта, от которого вы зависите.
Как и другие утверждали, отсутствующий модуль компиляции не имеет ничего общего с файлами, которые вы #include (которые имеют отношение только к компиляции, а не к ссылкам)

2 голосов
/ 10 сентября 2011

Связывание объектных файлов выполняется не с помощью команд препроцессора #include, а с помощью самого VC ++ или (нестандартных) команд #pragma.

...