2017-03-07 130 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'。