Процессорное время, использующее GetProcessTimes и FileTimeToSystemTime, не работает при 64-битном выигрыше

Я пытаюсь измерить процессорное время. Он отлично работает на Win 32, но на 64-битной, он говорит:

error LNK2019: unresolved external symbol __imp_GetProcessTimes referenced in function "unsigned int __cdecl getWINTime(void)" (?getWIN32Time@@YAIXZ) 

Похожая ошибка для FileTimeToSystemTime

error LNK2019: unresolved external symbol __imp_FileTimeToSystemTime referenced in function "unsigned int __cdecl getWINTime(void)" (?getWIN32Time@@YAIXZ)

Сама функция не так важна, с ней проблем нет.
Это правомерно в 64-битной архитектуре или как?

Это не единственная проблема, которая, по-видимому, связана с неправильной связью с библиотеками в 64-битных окнах.
Есть ли настройка, которую я должен установить для правильной связи?

3 ответа

Решение

У вас в настройках сборки для двух сред указаны одинаковые библиотеки импорта. Обе эти функции находятся в kernel32.dll.

Проверьте свои флаги компоновщика. Вся конфигурация проекта для 64-битных сборок отличается от конфигурации 32-битных сборок. Поэтому проверьте настройки вашего проекта и убедитесь, что они оба ссылаются на одни и те же библиотеки.

Также убедитесь, что компилятор и компоновщик были вызваны правильно, либо проверяя панели командной строки в настройках проекта, либо просматривая журнал сборки.

Я только что попытался создать 64-битную сборку этого кода в Visual Studio 2010, и он работал нормально:

#include <Windows.h>

int CALLBACK WinMain(
  __in  HINSTANCE hInstance,
  __in  HINSTANCE hPrevInstance,
  __in  LPSTR lpCmdLine,
  __in  int nCmdShow
) {
  FILETIME ct;
  FILETIME et;
  FILETIME kt;
  FILETIME ut;
  GetProcessTimes(NULL, &ct, &et, &kt, &ut);

  SYSTEMTIME st;
  FileTimeToSystemTime(&ut, &st);

}

Я просто создал новый проект Win32, добавил 64-битную платформу и скомпилировал. Я не изменил никаких настроек проекта вообще.

В документации для GetProcessTimes и FileTimeToSystemTime будет указано, какие заголовки нужно включить, а также файл библиотеки, на который будет ссылаться. Однако Visual Studio обычно автоматически связывает их с вами. Вы игнорировали библиотеки по умолчанию, проверенные, возможно, в вашем проекте?

Другие вопросы по тегам