奇怪的链接器错误

Weird Linker Error

本文关键字:错误 链接      更新时间:2023-10-16
#include path
include_directories(
${PROJECT_SOURCE_DIR}/include
${HGE_INCLUDE_DIR}
${IKL_INCLUDE_DIR}
${BOOST_DIRECTORY}
)
#include all files
FILE(GLOB CORE_SRCS source/core/*.cpp)
FILE(GLOB TOOL_SRCS source/tools/*.cpp)
FILE(GLOB GAME_SRCS source/game/*.cpp)
#Making a compiled library
add_library(GAMECORE_LIBRARY ${CORE_SRCS} ${HGE_LIBRARY} ${HGE_HELPER_LIBRARY})
#add executable
add_executable(DemoGame ${GAME_SRCS})
##link executable to HGE lib
TARGET_LINK_LIBRARIES(DemoGame ${HGE_LIBRARY} ${HGE_HELPER_LIBRARY} ${IKL_LIBRARY} GAMECORE_LIBRARY)
if(BUILD_TOOLS)
add_executable(EntityTool ${TOOL_SRCS})
TARGET_LINK_LIBRARIES(EntityTool ${HGE_LIBRARY} ${HGE_HELPER_LIBRARY} ${IKL_LIBRARY} GAMECORE_LIBRARY)
endif(BUILD_TOOLS)

这是我目前的CMAKE..

我收到一个奇怪的链接器错误 hgeGUI 类
例如:DemoGame/source/core/GameMainMenu.cpp:74:未定义的对'hgeGUI::hgeGUI()'的引用

仅当我尝试将核心文件编译为静态库时,才会发生这种情况。当我添加带有CORE_SRCS可执行文件并删除当前编译库的依赖项时..它会正常工作..

我也尝试将 hgegui.cpp 文件复制粘贴到我的核心源目录中.. 并将#include "....includehgegui.h"更改为 #include "hgegui.h"

之后,我的链接器代码解决了问题,但我得到了分段错误,但我猜上一步中链接文件不正确..

这是他们的.h文件
的链接http://trac.assembla.com/snowscape/browser/hge/include/hgegui.h

看起来您滥用了${HGE_LIBRARY}${HGE_HELPER_LIBRARY}变量。

add_library调用中,您将包括构成该库的所有源文件。

target_link_libraries调用中,指定链接目标时要使用的库或标志。

因此,如果${HGE_LIBRARY}${HGE_HELPER_LIBRARY}指定要指定为GAMECORE_LIBRARY依赖项的库的路径,则需要执行以下操作:

add_library(GAMECORE_LIBRARY ${CORE_SRCS})
target_link_libraries(GAMECORE_LIBRARY ${HGE_LIBRARY} ${HGE_HELPER_LIBRARY})

依赖项是可传递的,因此这意味着当您将GAMECORE_LIBRARY指定为 DemoGameEntityTool 的依赖项时,CMake 会识别${HGE_LIBRARY}${HGE_HELPER_LIBRARY}也是依赖项,因此您可以根据需要从target_link_libraries调用中删除它们DemoGameEntityTool


有关add_librarytarget_link_libraries的更多信息,请运行:

cmake --help-command add_library
cmake --help-command target_link_libraries
相关文章: