#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)
这是我目前的事。
我收到hgeGUI类的奇怪链接器错误
例如:DemoGame / source / core / GameMainMenu.cpp:74:对“ hgeGUI :: hgeGUI()”的未定义引用
仅当我尝试将核心文件编译为静态库时,才会发生这种情况。
当我使用CORE_SRCS添加可执行文件并删除对当前编译库的依赖时..它将正常工作。
我也尝试将hgegui.cpp文件复制粘贴到我的核心源目录中。然后将
#include "..\..\include\hgegui.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
指定为DemoGame
和EntityTool
的依赖关系时,CMake会认识到${HGE_LIBRARY}
和${HGE_HELPER_LIBRARY}
也是依赖关系,因此可以将其从根据需要调用target_link_libraries
和DemoGame
。有关
EntityTool
和add_library
的更多信息,请运行:cmake --help-command add_library
cmake --help-command target_link_libraries
关于c++ - 奇怪的链接器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10729995/