2016-07-27 23 views
0

Wenn ich versuche, GetProcessMemoryInfo zu anrufen bekomme ich einen Fehler: undefined reference to `GetProcessMemoryInfo‘Fehler beim Versuch, die aktuelle Prozessspeichergröße auf C zu erhalten ++, MinGW

ich dieses Problem gesehen habe: Undefined reference to [email protected]

aber es löst meinen nicht.

Ich versuche zu wissen, was die Größe meines Prozesses im RAM ist, also muss ich die 'GetProcessMemoryInfo' Methode verwenden.

Mein Problem ist, dass die Verbindung bricht, wenn ich das tue.

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}) 

Sie können sehen, dass ich das -lpsapi Argument,

Der Fehler I erhalten:

[ 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 

Ich arbeite mit CLION und mingw -w64 \ x86_64-4.8.3-posix-seh-rt_v3-rev2 \ mingw64

Gibt es einen anderen Weg o f tu dies (außer mit psapi)?

Antwort

1

Die Antwort dort ist richtig. Sie sollten verlinken gegen psapi:

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

Oder Sie können es manuell an die Linker-Flags hinzufügen - Sie können es zu den Compiler-Flags in Ihrem Beispiel hinzugefügt.

+0

Danke für Ansering, jetzt bekomme ich diesen Fehler: Geben Sie Link-Bibliotheken für Ziel "GridSolver", die nicht von diesem Projekt gebaut wird. – yossico

+0

Dann ist das von Ihnen angegebene Beispiel eindeutig falsch oder Sie haben es an die falsche Stelle eingefügt, weil Ihr Beispiel eindeutig ein 'gridSolver'-Ziel hat. Wenn Sie die 'target_link_libraries' vor dem' add_executable' hinzugefügt haben, lesen Sie bitte die cmake docs. – Dutow

+0

Sie haben Recht, ich setze es vor den add_executable Teil – yossico