gpt4 book ai didi

c++ - 奇怪的链接器错误

转载 作者:行者123 更新时间:2023-11-28 08:03:50 25 4
gpt4 key购买 nike

#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 "..\..\include\hgegui.h" 更改为 #包括“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

关于c++ - 奇怪的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com