2016-07-27 12 views
0
は、私がGetProcessMemoryInfoを呼び出すしようとすると、私はエラーを取得

、C++での現在のプロセスのメモリサイズを取得しようとしたとき: `GetProcessMemoryInfo」エラーMinGWの

へ 未定義の参照を、私はこの問題を見てきました:Undefined reference to [email protected]

しかし、それは私を解決しません。

私はRAM内のプロセスのサイズを知りたいので、そのためには 'GetProcessMemoryInfo'メソッドを使用する必要があります。

私の問題は、私がそれをするとリンクが壊れてしまうことです。

CmakeLists.txt:私が手にエラーがある

project(maxpath) 

set(dir ${CMAKE_CURRENT_SOURCE_DIR}) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${dir}/build") 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -static-libgcc -static-libstdc++ -static -m64 -lpsapi") 

file(GLOB LIB_ALG algorithms/*.hpp) 
file(GLOB LIB_DS datastructures/*.hpp) 
file(GLOB LIB_LOG include/*.h) 

set(GRID_GENERATOR 
     ${LIB_ALG} 
     ${LIB_DS} 
     ${LIB_LOG} 
     grid/generator.cpp 
     grid/grid.hpp) 

set(GRID_SOLVER 
     ${LIB_ALG} 
     ${LIB_DS} 
     ${LIB_LOG} 
     grid/main_grid.cpp 
     grid/grid.hpp 
     include/memory_helper.cpp include/memory_helper.hpp include/fnv.h) 
add_executable(gridGenerator ${GRID_GENERATOR}) 
add_executable(gridSolver ${GRID_SOLVER}) 

あなたは、私が-lpsapi引数を使用することを見ることができ、

:私はCLionとmingwので働いている

[ 33%] Linking CXX executable "some path...\gridSolver.exe" 
CMakeFiles\gridSolver.dir/objects.a(memory_helper.cpp.obj):memory_helper.cpp:(.text+0xf1): undefined reference to `GetProcessMemoryInfo' 
CMakeFiles\gridSolver.dir/objects.a(memory_helper.cpp.obj):memory_helper.cpp:(.text+0x131): undefined reference to `GetProcessMemoryInfo' 
C:/PROGRA~1/MINGW-~1/X86_64~1.3-P/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\gridSolver.dir/objects.a(memory_helper.cpp.obj): bad reloc address 0x0 in section `.pdata' 
C:/PROGRA~1/MINGW-~1/X86_64~1.3-P/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation 
collect2.exe: error: ld returned 1 exit status 
mingw32-make.exe[3]: *** [some path.../gridSolver.exe] Error 1 
CMakeFiles\gridSolver.dir\build.make:121: recipe for target 'some path.../gridSolver.exe' failed 
mingw32-make.exe[2]: *** [CMakeFiles/gridSolver.dir/all] Error 2 
CMakeFiles\Makefile2:103: recipe for target 'CMakeFiles/gridSolver.dir/all' failed 
mingw32-make.exe[1]: *** [CMakeFiles/gridSolver.dir/rule] Error 2 
CMakeFiles\Makefile2:115: recipe for target 'CMakeFiles/gridSolver.dir/rule' failed 
mingw32-make.exe: *** [gridSolver] Error 2 
makefile:130: recipe for target 'gridSolver' failed 

-w64 \ x86_64-4.8.3-posix-seh-rt_v3-rev2 \ mingw64

別の方法がありますかこれを行うf(psapiを使用する場合を除く)?

答えて

1

正しい答えがあります。あなたはpsapiとリンクする必要があります

FIND_LIBRARY (PSAPI Psapi) 
TARGET_LINK_LIBRARIES(gridSolver ${PSAPI}) 
TARGET_LINK_LIBRARIES(gridGenerator ${PSAPI}) 

それとも、リンカのフラグを手動で追加することができます - あなたはあなたの例ではコンパイラフラグにこれを追加しました。

+0

アンサーしてくれてありがとうございます。このエラーが発生しました。このプロジェクトでは作成されていないtarget "gridSolver"のリンクライブラリを指定します。 – yossico

+0

あなたの例題がはっきりと間違っているか、間違った場所に貼り付けてしまいました。あなたの例は明らかに 'gridSolver'ターゲットを持っているからです。 'add_executable'の前に' target_link_libraries'を追加した場合は、cmakeのドキュメントを読んでください。 – Dutow

+0

あなたは正しいです、私はすぐにadd_executableの部分の前に入れます – yossico