C Ошибка связывания программы? - PullRequest
1 голос
/ 22 июля 2011

У меня есть ситуация.У меня есть некоторые функции в заголовочном файле, которые объявлены с ключевым словом extern.У меня есть их определение в файле C.эти два файла находятся в одном каталоге.Я сделал визуальный студийный проект и включил заголовочный файл.когда я использую функции, объявленные в заголовочном файле.программа выдает ошибку соединения (LNK2019).Я вставил путь к каталогу, содержащему заголовок и файл C, в том числе дополнительные каталоги.но проблема все еще там.Как я могу решить эту проблему?

Спасибо

Ответы [ 5 ]

0 голосов
/ 26 июля 2011

Спасибо всем вам.Я нашел проблему, но приведенные выше ответы также очень полезны.проблема была в том, что я вызывал те функции, определение которых было в .c файле.Но я звонил в моем файле .cpp.Это было причиной этой ошибки.Я изменил расширение файла .cpp на файл .c, и теперь он работает нормально.Thnaks

0 голосов
/ 22 июля 2011

Предполагается, что xx.h (который вы включаете в prog.c) и xx.c в C:\dev\c\libx:

cl /I C:\dev\c\libx prog.c                C:\dev\c\libx\xx.c
cl /I C:\dev\c\libx prog.c /link /LIBPATH:C:\dev\c\libx xx.obj

Та же история, если у вас есть LIB вместо OBJ.

В Visual Studio, как уже говорили другие, просто добавьте исходный файл в свой проект.Щелкните правой кнопкой мыши свой проект в проводнике проекта, «Добавить ...», «Существующий элемент ...» (или аналогичный на английском языке), затем перейдите к файлу.

0 голосов
/ 22 июля 2011

Включили ли вы исходный файл C, который содержит определение функции, в файл проекта visual studio?Я считаю, что компоновщик жалуется, что он не может найти определения функции

0 голосов
/ 22 июля 2011

Важно добавить файл .c в проект / решение.В этом цель проекта: обратиться ко всем необходимым файлам реализации (например, .c файлам).Видимо, ты этого не делал.Отсюда и ошибка.

Вам не нужно добавлять заголовочные файлы (т.е. .h файлы) в проект / решение.Заголовочные файлы обычно добавляются в проект для удобства, чтобы вы могли видеть их в одном месте.В противном случае это совершенно не нужно.

0 голосов
/ 22 июля 2011

Функции не нужно объявлять с ключевым словом extern.Это избыточно.

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

...