cmake生成库文件的时候报错未定义函数

利用CMakelists编译生成库文件的时候报错存在未定义函数。

img


这个是CMakelists内容以及报错内容。

img


这个是顶层CMakelists内容

其中libdoipcommon库以及编译生成成功了,但是libdoipserver库报错。有点疑惑为什么会报这种错误,生成库的时候不是不需要链接依赖库和.cpp文件只需要声明就行了吗,希望能来个人解解惑。

编译运行环境是在window下qt上运行的

可能存在以下原因导致生成库文件时出现未定义函数的错误:

  1. 编译时未将 message.h 所在的文件夹添加到 include 路径中,导致编译器找不到该头文件。在顶层的 CMakeLists.txt 中,已经为 doipcommon 添加了 include 路径:
target_include_directories(doipcommon PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include)


> 
但是对于 doipserver,没有添加 include 路径,需要将其添加:

> 


```bash
target_include_directories(doipserver PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include)
  1. 在 doipserver.cpp 中,可能存在函数声明和函数定义不一致的情况。请检查 doipserver.cpp 中是否存在 DOIPServer::receive() 函数的定义,并且其参数和返回值是否和 message.h 中的声明一致。如果定义和声明不一致,则会出现未定义函数的错误。
  1. 可能存在多个 message.h 文件,而编译器加载的是不包含目标函数声明的 message.h 文件。请检查系统中是否存在多个 message.h 文件,并且确认编译器加载的是目标文件所在的路径下的 message.h 文件。