2017-03-07 8 views
0

私は大学の課題に取り組んでいます。自分のIDE(Clion)でプログラムを正常に実行して動作させることができます。しかし、私は次のエラーを取得、同じマシン上で手動で構築された実行可能ファイルを実行しようとすると:C++ MinGWリンカーエラー_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj

_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj

長い文字列を:「_ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj」

私はGCCとMINGW32を使用して構築しています/ G ++バージョン5.3.0 on 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

これらのライブラリに静的にリンクしていますか?その場合、私は非常に注意する。この問題の一般的な原因は、一部のライブラリが、MinGWを使用しているため、使用しているものとは異なるVisual Studioのバージョンでコンパイルされていることです。これが事実であることを確認できますか?共有ライブラリにリンクすることで、この問題を解決しようとする場合があります。 –

+0

@TheQuantumPhysicist私が知っている限り、ライブラリに静的にリンクしています。しかし、Visual StudioではなくMinGWコンパイラを使用してソースから自分のマシンでコンパイルされています。私は私のオリジナルの投稿で言及したように、このプロジェクトではVisual Studioを全く使用していません。 –

答えて

1

わかりましたので、私は最終的に数日後に、この問題を修正しました。

この問題の原因は、私のシステムのPATH変数に、 'libstdC++ - 6.dll'ファイルの独自のバージョンを含むGTK Sharpに属するディレクトリがあり、このDLLファイルが私のコンパイラからのものです。

GTK Sharpから競合するDLLファイルを削除した後、プログラムをコンパイルして手動で実行することができました。

PATH変数に同じ名前のファイルが複数あるかどうかを確認するには、コマンドプロンプトで 'where libstdC++ - 6.dll'のように 'where'コマンドを実行します。