Я пытаюсь запустить два отдельных функций, определенных в том же заголовке:«неопределенная ссылка на» одной функции в заголовке C, но не другой
void MIC3_WriteByte(PmodMIC3* InstancePtr, u8 cmd);
void MIC3_ReadSPI(PmodMIC3* InstancePtr, u8 reg, u8 *rData, int nData);
Когда я называю их так же, как это, WriteByte работы просто
выполнить точнуюMIC3_WriteByte(µphone, byte);
MIC3_ReadSPI(µphone, reg, byteArray, ndata);
Но ReadSPI дает мне ошибку, когда я запускаю линкер:
main.c:84: undefined reference to `MIC3_ReadSPI'
Если я помню мой C правильно Это означает, что функция либо не определена в заголовке, либо неправильно связана. Но если это так, почему функция работает только в работе заголовка, а не в другом?
Более смешения, если я намеренно malform вход в ReadSPI (скажем лишь придав ему 3 входа), я получаю другое сообщение об ошибке -
../src/main.c:84:5: error: too few arguments to function 'MIC3_ReadSPI'
Как он может знать, сколько аргументов функция должна иметь , но не в том, что функция должна существовать? Это какой-то артефакт, возникающий из-за первой ошибки, которую бросает компоновщик, и второй ошибки, сгенерированной компилятором?
«функция либо не определена в заголовке, либо неправильно связана». Это последнее. Вам необходимо описать файлы, в которых определены функции, а также точную ссылку. – kaylum
Число аргументов определяется компилятором путем чтения заголовка функции (определенного в файле заголовка, который вы успешно включили в исходный код). Реализация функции хранится в библиотеке, которую вы не смогли связать с компиляцией _after_. Заголовок функции и реализация функции должны совпадать, но они представляют собой два разных объекта. – DyZ