2017-03-07 73 views
0

我正在做大学的任务,我可以通过我的IDE(CLion)很好地运行我的程序并使其工作。然而,当我试图在同一台机器我碰到下面的错误上手动运行生成的可执行文件:C++ MinGW链接器错误_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj

_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj

长字符串:“_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj”

我使用MINGW32与海湾合作委员会建立/ G ++版本5.3.0在Windows 10上。我从源代码编译的库是GLEW 2.0和GLFW 3.2.1。我也使用stb_image。

我的代码正在为C++ 14标准构建。我不能为我的生活弄清楚是什么导致了这个错误。

我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.6) 
project(FlightSim) 

#Set C++ standard to C++14 
set(CMAKE_CXX_STANDARD 14) 
set(CMAKE_CXX_STANDARD_REQUIRED ON) 

#Set project directory variables 
set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") 
set(RESOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources") 
set(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/includes") 
set(LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib") 

#Include library headers 
include_directories("${INCLUDE_DIR}") 

#Add source files 
file(GLOB_RECURSE SOURCE_FILES "${SOURCE_DIR}/*.cpp") 
add_executable(FlightSim ${SOURCE_FILES}) 

#Add static definition for GLEW 
add_definitions(-DGLEW_STATIC) 

#Link libraries 
target_link_libraries(
     FlightSim 
     "${LIBRARY_DIR}/libglew32.a" 
     "${LIBRARY_DIR}/libglfw3.a" 
#  "${LIBRARY_DIR}/libSOIL.a" 
     opengl32.lib 
) 
+0

你是否静态链接到这些库?如果是这样的话,我会非常小心。这个问题的一个普遍原因是,某些库是使用与您正在使用的版本不同的Visual Studio版本编译的(因为您使用的是MinGW)。你能证实这种情况吗?您可以尝试通过链接到共享库来解决此问题。 –

+0

@TheQuantumPhysicist我正在静态地链接到库,据我所知。但是,它们是使用MinGW编译器从源代码编译到自己的机器上的,而不是使用Visual Studio编译的。我在这个项目中也没有使用Visual Studio,正如我在原始文章中提到的那样。 –

回答

1

好了,所以我几天后终于解决了这个问题。

这个问题的原因是在我的系统PATH变量中,有一个属于GTK Sharp的目录,它包含它自己版本的'libstdC++ - 6.dll'文件,并且正在使用这个DLL文件而不是一个来自我的编译器。

从GTK Sharp中删除冲突的DLL文件后,我能够编译我的程序并手动运行它。

要检查PATH变量中是否有多个同名的文件,可以在命令提示符中运行'where'命令,如下所示:'where libstdC++ - 6.dll'。