C ++ # включает в себя проблему с внешней функцией - PullRequest
1 голос
/ 28 ноября 2010

Я настоящий новичок, и я программирую на C ++, используя Visual Studio. У меня есть простой код cpp, который вызывает некоторые функции, написанные в файлах .c и .h. Я включил этот файл с помощью директивы #include, и среда «видит» функцию. Когда я компилирую, я получаю это

Ошибка 7, ошибка LNK2019: неразрешенный внешний символ _IMUsendAccelToFIFO, указанный в функции _main D: \ Cprojects \ Pencil \ Pencil \ Pencil.obj Pencil

Что мне здесь не хватает?

Спасибо всем!

Ответы [ 5 ]

3 голосов
/ 28 ноября 2010

Это ошибка компоновщика, а не ошибка компилятора.Компилятор доволен, он увидел объявление функции в файле .h.Компоновщик не существует, он не может найти определение функции.

Добавьте файл .c в свой проект.

0 голосов
/ 29 ноября 2010

Решено!Большое спасибо!Библиотеки, которые я использовал, нужно было собрать.Я пытался, но я не мог собрать их, так как раньше получал ошибку «пространства кучи»!

Я установил Visual Studio 2005 (с помощью которого код был произведен поставщиком), и это сработало с первой попытки!Возможно, есть проблемы с обратной совместимостью.

0 голосов
/ 28 ноября 2010

Если вы получили ошибку в Visual Studio, вы можете найти код ошибки в Google, и вы получите для этого довольно обширную информацию.В этом случае, поиск в Google LNK2019 дает эту страницу MSDN в качестве первого обращения, которая также предоставляет несколько примеров того, как вы получаете ошибку.
Ваш поставщик должен был предоставить вам некоторые файлы .lib (обычно находящиесяпапка с именем lib?).Убедитесь, что они добавлены в проект через:

  • Проект> Свойства> Свойства конфигурации> Линкер> Ввод> Дополнительные зависимости

Вы можететакже посмотрите, есть ли какая-либо информация для начала работы от вашего поставщика, которая объясняет, какие зависимости вы должны включить в свой проект.
Если вы не уверены, что компилятор и компоновщик делает, выберитекнигу , в которой это объясняется, или поискать бесплатных альтернатив .

0 голосов
/ 28 ноября 2010

Visual Studio по умолчанию компилирует файлы .c как файлы C и файлы .cpp как C ++, и это может вызвать проблемы, потому что если вы хотите вызывать функции, определенные в файле .c, из файла .cpp, то вы должны обернутьзаголовок в extern "C" { }, так как компилятор будет ожидать, что все функции, не объявленные extern "C", будут из C ++.Это из-за детали реализации, называемой искажение имени.В качестве альтернативы вы можете принудительно скомпилировать все файлы как C или C ++ в настройках проекта.

0 голосов
/ 28 ноября 2010

Используете ли вы ghettopilot ? это единственная ссылка, которую я могу найти в Интернете на функцию, которую вы пропустили. Если да, то вам нужно включить .lib-файл для этой библиотеки в опции ссылок.

...