Неожиданная неопределенная ссылка

Я получаю неопределенную указанную ошибку, не зная причину.

Таким образом, у меня есть 2 файла, которые делают статическую библиотеку: клавиатура_input.c, клавиатура_input.h

Вот содержимое файла .h:

#ifndef __MOD_KBINPUT__
#define __MOD_KBINPUT__

int kbInit();
int kbWait();

int kbTest();

#endif

И файл CMakeLists.txt выглядит так:

FILE(
GLOB_RECURSE
sources
*.c
)
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/include/utils/kbreader")
ADD_LIBRARY(keyboardReader ${sources})

Компиляция этой библиотеки дает некоторые предупреждения:

src/utils/kbreader/keyboard_input.c: In function ‘kbInit’:
src/utils/kbreader/keyboard_input.c:13:14: warning: assignment from incompatible pointer type [enabled by default]
src/utils/kbreader/keyboard_input.c: In function ‘kbWait’:
src/utils/kbreader/keyboard_input.c:21:55: warning: passing argument 4 of ‘fread’ from  incompatible pointer type [enabled by default]
/usr/include/stdio.h:708:15: note: expected ‘struct FILE * __restrict__’ but argument is of type ‘struct FILE *’

Теперь для моего основного исполняемого файла (main.cpp):

#include <keyboard_input.h>
int main()
{
  kbTest();
  return 0;
}

Обработано следующим файлом CMakeLists.txt:

include_directories("${PROJECT_SOURCE_DIR}/include/utils/kbreader")

file(
    GLOB_RECURSE
    srcs
    *.cpp
)

add_executable(
    PEM
    ${srcs}
)
target_link_libraries(PEM keyboardReader)

В итоге получаю эту ошибку:

CMakeFiles/PEM.dir/main.cpp.o: In function `main':
main.cpp:(.text+0xb): undefined reference to `kbTest()'
collect2: ld returned 1 exit status
make[2]: *** [src/PEM/main2/PEM] Error 1
make[1]: *** [src/PEM/main2/CMakeFiles/PEM.dir/all] Error 2

LibkeyboardReader.a создан, и функция kbTest () не делает ничего, кроме

{return 0; }

Если я установлю определение kbTest () в заголовочном файле, оно будет работать.

Но я что-то не получаю, когда набираю: make keyboardReader, вот вывод:

[ 73%] Building C object src/utils/kbreader/CMakeFiles/KeyboardReader.dir/keyboard_input.c.o
[Warning explained above]
Linking C static library ../../../lib/libKeyboardReader.a

Что-то не так? Из-за сообщения об ошибке в моей библиотеке пропускается файл keyboard_input.c?

Ответы на вопрос(1)

Ваш ответ на вопрос