Во-первых, я уже несколько лет кодируюсь на C#, и это было давно, так как я написал любой код на C. Я использую Visual Studio 2013. Я работаю над образцом программы для продукта API, который делает моя компания. Большая часть программы находится в одном исходном файле & 1 файл заголовка. Программа должна анализировать XML, который возвращается вызовами API. Показывать, как анализировать XML, не является точкой примера, поэтому я решил, что программа будет определять простую функцию под названием GetXmlValue
, чтобы скрыть детали синтаксического анализа XML. Я определил эту функцию в главном файле .C, как это:Почему я получаю «неразрешенную внешнюю» ошибку?
//---------------------
// XML processing function forward declaration
// Note that the implementation of this functions is outside the scope of this program. You must implement it yourself
// using a real XML library.
//---------------------
// This function must return a value indicating the number of characters that were copied into the buffer.
// If no characters were copied, the return value should be zero. It's OK if the function returns a negative value
// to indicate that the XPath could not be found.
extern int GetXmlValue(char *xml, char *xpath, char *buffer, int bufferSize);
Затем в отдельном файле с именем ParseFunction.c, я реализовал эту функцию. Все компилируется без ошибок, но я получаю «неразрешенный внешний символ» Ошибка ссылка:
error LNK2019: unresolved external symbol "int __cdecl GetXmlValue(char *,char *,char *,int)" ([email protected]@[email protected]) referenced in function "int __cdecl parseCommandType(char *)" ([email protected]@[email protected]) C:...\LPRSDK_Sample\Sample\Sample.obj
В качестве эксперимента, я закомментирована линии в функции, в которой сообщалось об ошибке, чтобы увидеть, если есть что-то неправильно с этой конкретной строкой, и ошибка просто перешла к следующей функции, в которой была вызвана функция.
Если я переведу код для функции в файл C примера программы, все компилируется и связывается. Так что это, вероятно, что-то в моих настройках ссылок, но я недостаточно знаком со всеми настройками языка VS 2013 C, чтобы даже знать, где искать.
Я проверил файл журнала, и я вижу, что файл .obj для обоих исходных файлов включен, поэтому я не понимаю, почему я вообще получаю неразрешенную внешнюю символьную ошибку. Что я сделал не так?
Вы уверены, что 'ParseFunction.o' (или' .obj') связан с вашим основным файлом? – CiaPan
Функция определена в файле .c, а файл журнала показывает, что оба файла .obj включены в команду link Что касается отдельного ParseFunction.h, я тоже этого не делал. –
Если это не большой проект со многими файлами, попробуйте перестроить завершить проект и опубликовать полный журнал сборки в вашем вопросе. –