包括没有标题的SO文件

时间:2018-04-28 00:13:20

标签: c++ cmake shared-libraries glfw

我最近参与制作了一个基本的游戏引擎。我决定将所有中间件放入Externals目录,其中bash脚本将我的所有中间件构建到Binaries目录中的共享对象文件中。

在我的CmakeLists.txt文件中,我能够将这些库链接到我的主要可执行文件中,如下所示:

add_library (glfw SHARED IMPORTED)
set_target_properties (glfw PROPERTIES IMPORTED_LOCATION 
  ${ENGINE_BINARIES_DIR}/Libraries/Shared/libglfw.so.3.2
)

...

target_link_libraries (Engine glfw)

但是,当我尝试在我的主文件中包含GLFW/glfw3.h时,它无法编译。这是有道理的,因为没有glfw3.h文件;然而,将glfw纳入我的项目的所有其他尝试都失败了。

TL; DR

从现有共享对象库中包含标头的最佳方法是什么?是否有可能在没有includes/glfw目录的情况下实现此目的,或者是否需要修改其代码/项目结构才能加载这些函数?

1 个答案:

答案 0 :(得分:1)

我现在意识到自己的错误。

在发布此问题之前,我对共享对象/ DLL和构建GLFW进行了一些研究;但是,我相信我仍然对共享库是什么以及它是如何工作感到困惑。

我现在意识到你,实际上需要包含头文件;因为它包含中间件代码的声明,而libglfw.so.3.2库包含代码的定义

我通过将.so文件保存在Libraries/Shared目录和External目录中的GLFW头文件中,并使用CMake将编译器/链接器指向两者来解决了我的问题。< / p>