2016-07-27 7 views
0

나는 오류 얻을 :`에 정의되지 않은 참조를 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

답변이 정확합니다.

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

을 아니면 링커 플래그에 수동으로 추가 할 수 있습니다 - 당신이 당신의 예에서 컴파일러 플래그에 추가 : 당신은 psapi에 연결해야합니다.

+0

감사합니다.이 오류는 다음과 같습니다.이 프로젝트에서 빌드하지 않은 target "gridSolver"에 대한 링크 라이브러리를 지정하십시오. – yossico

+0

그러면 예제에 분명히 잘못된 "gridSolver"대상이 있기 때문에 잘못된 위치에이 예제를 붙여 넣었을 것입니다. 'add_executable '앞에'target_link_libraries'를 추가했다면, cmake 문서를 읽어보십시오. – Dutow

+0

당신이 맞습니다, 제가 accedently add_executable 부분 앞에 넣어 – yossico