Соединение Windows API

Я пользовался библиотекой ITK. Когда я записал пример программы, пользующийся этой библиотекой, у меня есть следующие ошибки компоновщика. Поскольку мы видим, что эти все "неразрешенные" символы являются Windows API functions, и эти API-функции окон использовались библиотекой ITK и не моей программой.

Error   1   error LNK2019: unresolved external symbol _SnmpUtilVarBindFree@4 referenced in function "int __cdecl gdcm::GetMacAddrSys(unsigned char *)" (?GetMacAddrSys@gdcm@@YAHPAE@Z)  C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error   2   error LNK2019: unresolved external symbol _SnmpUtilOidNCmp@12 referenced in function "int __cdecl gdcm::GetMacAddrSys(unsigned char *)" (?GetMacAddrSys@gdcm@@YAHPAE@Z) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error   3   error LNK2019: unresolved external symbol _SnmpUtilOidCpy@8 referenced in function "int __cdecl gdcm::GetMacAddrSys(unsigned char *)" (?GetMacAddrSys@gdcm@@YAHPAE@Z)   C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error   4   error LNK2019: unresolved external symbol _WSAStartup@8 referenced in function "int __cdecl gdcm::GetMacAddrSys(unsigned char *)" (?GetMacAddrSys@gdcm@@YAHPAE@Z)   C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error   5   error LNK2019: unresolved external symbol __imp__UuidCreate@4 referenced in function "private: static bool __cdecl gdcm::Util::GenerateUUID(unsigned char *)" (?GenerateUUID@Util@gdcm@@CA_NPAE@Z)  C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error   6   error LNK2019: unresolved external symbol _gethostbyname@4 referenced in function "private: static class std::basic_string,class std::allocator > __cdecl gdcm::Util::GetIPAddress(void)" (?GetIPAddress@Util@gdcm@@CA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)  C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error   7   error LNK2019: unresolved external symbol _gethostname@8 referenced in function "private: static class std::basic_string,class std::allocator > __cdecl gdcm::Util::GetIPAddress(void)" (?GetIPAddress@Util@gdcm@@CA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)    C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error   8   error LNK2019: unresolved external symbol _WSACleanup@0 referenced in function "private: static class std::basic_string,class std::allocator > __cdecl gdcm::Util::GetIPAddress(void)" (?GetIPAddress@Util@gdcm@@CA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)

Эти ошибки подняли немного вопросов в моем уме. Для некоторых из них я думаю, что знаю ответы, но мне нужно подтверждение, если я прав или неправ.

  1. Они Windows API functions используется в gdcmUtil.cpp (потому что он говорит что gdcmUtil.obj). Так, компилятор компилирует gdcmUtil.cpp, чтобы (сказать) gdcmUtil.asm, и это - ассемблер, собирает его к gdcmUtil.obj. С тех пор при компиляции библиотеки мы не генерируем EXE-файлов. Эти *.obj файлы не связаны против никакого другого *.obj. Так, символы окон API являются все еще внешними символами для того модуля и таким образом оставленный неразрешенный.Правильно?

  2. Кто генерирует *.LIB файл? Я подразумеваю, что компилятор генерирует *.s файл, и Ассемблер генерирует *.obj файл, и мы не используем компоновщика. Так, от того, где мы получали *.lib файл? Кто упаковал все *.obj файлы в *.lib файл?

  3. Как приложения Windows API (программы, которые записаны в C и используют Windows API), компилируются? Я имею в виду, потому что это - автономные приложения, как это WIN32 разрешенные символы API? Принятие, я записал такую программу, кто-либо может сказать мне, что я должен успешно создать приложение?

  4. Я знаю, что Windows API реализован в kernel32.dll, gdi32.dll, user32.dll (который может в свою очередь импортировать некоторый другой dlls как wsock32.dll для сетевого API и т.д.), но вопрос состоит в том, Как использовать эти функции в Windows API functions в программе C. Я имею в виду, как динамично связаться против этих DLLs

  5. В моих поисках для нахождения решения моей проблемы ошибок Компоновщика. Я обнаружил, что должен добавить wsock32.lib (для WinSock 1.1) или ws2_32.lib (для WinSock 2) или snmpapi.lib к Входу Компоновщика.

    1. С тех пор, когда Windows API статически связывается?
    2. С тех пор, когда окна API поставляется в статических библиотеках (*.lib файлы)?
    3. В котором каталоге я могу найти все эти странные *.lib файлы?
  6. Теперь, Есть ли какое-либо альтернативное решение кроме добавления *.lib файлы во входные файлы компоновщика? потому что, когда когда-либо я использую некоторую новую библиотечную функцию ITK, я получаю новую ошибку компоновщика. Я имею к Google для нахождения, в котором *.lib файле этот определенный символ (функция API окна) принадлежит, чтобы затем добавить, что *.lib файл моему компоновщику ввел. Его управление мной сумасшедший! Есть ли какой-либо нормальный путь?

5
задан claws 4 August 2010 в 22:42
поделиться