【问题标题】:C++ MinGW Linker Error _ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcjC++ MinGW 链接器错误 _ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj
【发布时间】:2017-03-07 10:16:21
【问题描述】:

我正在为大学做作业,我可以通过我的 IDE (CLion) 很好地运行我的程序并让它运行。但是,当我尝试在同一台机器上手动运行构建的可执行文件时,出现以下错误:

长字符串:“_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj”

我在 Windows 10 上使用 MinGW32 和 GCC/G++ 版本 5.3.0 构建。我使用的从源代码编译的库是 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
)

【问题讨论】:

  • 您是否静态链接到这些库?如果是这样的话,我会非常小心。此问题的一个常见原因是某些库是使用与您正在使用的版本不同的 Visual Studio 版本编译的(因为您使用的是 MinGW)。你能证实这是事实吗?您可以尝试通过链接到共享库来解决此问题。
  • @TheQuantumPhysicist 据我所知,我正在静态链接到库。但是,它们是在我自己的机器上使用 MinGW 编译器而不是 Visual Studio 从源代码编译的。正如我在原始帖子中提到的那样,我在这个项目中也根本没有使用 Visual Studio。

标签: c++ gcc g++ mingw libstdc++


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多