C++ MinGW 链接器错误 _ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj
C++ MinGW Linker Error _ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj
我正在为大学做作业,我可以通过我的 IDE (CLion) 运行 我的程序很好地运行它。但是,当我尝试在同一台机器上手动 运行 构建的可执行文件时,出现以下错误:
长字符串:“_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj”
我正在 GCC/G++ 版本 5.3.0 上使用 MinGW32 在 Windows10 上构建。我使用的从源代码编译的库是 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
)
好的,几天后我终于解决了这个问题。
这个问题的原因是在我的系统 PATH 变量中,有一个属于 GTK Sharp 的目录,其中包含它自己版本的 'libstdc++-6.dll' 文件,并且正在使用这个 DLL 文件而不是那个来自我的编译器。
从 GTK Sharp 中删除冲突的 DLL 文件后,我能够编译我的程序并运行手动编译它。
要检查您的 PATH 变量中是否有多个同名文件,您可以 运行 命令提示符中的 'where ' 命令,如下所示:'where libstdc++-6.dll'.
我正在为大学做作业,我可以通过我的 IDE (CLion) 运行 我的程序很好地运行它。但是,当我尝试在同一台机器上手动 运行 构建的可执行文件时,出现以下错误:
长字符串:“_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj”
我正在 GCC/G++ 版本 5.3.0 上使用 MinGW32 在 Windows10 上构建。我使用的从源代码编译的库是 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
)
好的,几天后我终于解决了这个问题。
这个问题的原因是在我的系统 PATH 变量中,有一个属于 GTK Sharp 的目录,其中包含它自己版本的 'libstdc++-6.dll' 文件,并且正在使用这个 DLL 文件而不是那个来自我的编译器。
从 GTK Sharp 中删除冲突的 DLL 文件后,我能够编译我的程序并运行手动编译它。
要检查您的 PATH 变量中是否有多个同名文件,您可以 运行 命令提示符中的 'where ' 命令,如下所示:'where libstdc++-6.dll'.