Процессорное время, использующее 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 обычно автоматически связывает их с вами. Вы игнорировали библиотеки по умолчанию, проверенные, возможно, в вашем проекте?