【问题标题】:Weird Linker Error奇怪的链接器错误
【发布时间】:2012-05-24 01:22:39
【问题描述】:
#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 类链接器错误
eg : DemoGame/source/core/GameMainMenu.cpp:74: undefined reference to `hgeGUI::hgeGUI()'

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

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

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

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

【问题讨论】:

  • 请不要将 [已解决] 添加到您的目标。如果您的问题得到解答,请接受最有帮助的答案。

标签: c++ linker cmake linker-errors


【解决方案1】:

您似乎误用了 ${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

【讨论】:

  • 好吧,那行得通。我不知道 target_link_library 会为图书馆工作。谢谢
猜你喜欢
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 2014-04-27
  • 2016-07-09
  • 2012-02-27
相关资源
最近更新 更多