【问题标题】:Including SO files without headers包括没有标题的 SO 文件
【发布时间】:2018-04-28 00:13:20
【问题描述】:

我最近参与了制作基本游戏引擎的工作。我决定将我所有的中间件放到一个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 ;博士

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

【问题讨论】:

    标签: c++ cmake shared-libraries glfw


    【解决方案1】:

    我现在意识到我的错误了。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 2017-11-14
      • 2021-08-28
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      相关资源
      最近更新 更多