2016-07-27 2 views
0

Quand je tente d'appeler GetProcessMemoryInfo je reçois une erreur: référence non définie à Je l'ai vu cette question `GetProcessMemoryInfo »erreur en essayant d'obtenir la taille actuelle de la mémoire de processus sur C++, MinGW

: Undefined reference to [email protected]

mais cela ne résout pas le mien.

J'essaie de savoir quelle est la taille de mon processus dans la RAM, pour cela, j'ai besoin d'utiliser la méthode 'GetProcessMemoryInfo'.

Mon problème est que le lien se brise quand je fais cela.

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

Vous pouvez voir que j'utilise l'argument -lpsapi,

L'erreur que je reçois est:

[ 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 

Je travaille avec Clion et MinGW -w64 \ x86_64-4.8.3-posix-seh-rt_v3-rev2 \ mingw64

Existe-t-il un autre moyen de f cela (sauf utiliser psapi)?

Répondre

1

La réponse y est correcte. Vous devez créer un lien contre psapi:

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

Ou vous pouvez l'ajouter manuellement aux drapeaux de l'éditeur de liens - vous l'avez ajouté les drapeaux du compilateur dans votre exemple.

+0

Merci d'avoir répondu, Maintenant, j'ai cette erreur: spécifiez les bibliothèques de liens pour la cible "gridSolver" qui n'est pas construite par ce projet. – yossico

+0

Ensuite, l'exemple que vous avez fourni est clairement faux ou vous l'avez collé au mauvais endroit, car votre exemple a clairement une cible 'gridSolver'. Si vous avez ajouté le 'target_link_libraries' avant le' add_executable', veuillez lire les docs de cmake. – Dutow

+0

Vous avez raison, je mets accedently avant la partie ADD_EXECUTABLE – yossico