Не линкуется ndis.lib

Тема в разделе "WASM.NT.KERNEL", создана пользователем neutronion, 5 фев 2011.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Привет, пытаюсь использовать функцию из ndis.h
    NdisInitializeEvent
    В настройках линкера путь к ndis.lib прописан верно.
    Собираю в VS 2005 ver. 8.0
    Без указания этой функции все комплиться и линкуется нормально,
    кто-нибудь может подсказать или возможно понять причину через
    взлом линковщика(так будет по-моему быстрее всего, чем читать туеву хучу мануалов?)

    выдает такую ошибку:
    Error 3 error LNK2019: unresolved external symbol "__declspec(dllimport) void __stdcall NdisRegisterProtocol(int *,void * *,struct _NDIS40_PROTOCOL_CHARACTERISTICS *,unsigned int)" (__imp_?NdisRegisterProtocol@@YGXPAHPAPAXPAU_NDIS40_PROTOCOL_CHARACTERISTICS@@I@Z) referenced in function "long __stdcall DriverEntry(struct _DRIVER_OBJECT *,struct _UNICODE_STRING *)" (?DriverEntry@@YGJPAU_DRIVER_OBJECT@@PAU_UNICODE_STRING@@@Z) driver_template.obj
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    вырезаем гланды через ж...

    unresolved external symbol - самая распространенная ошибка., и решение её лежит на поверхности (в гугле например)
     
  3. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Теоретически мой друг, теория и практика одно и тоже, практически - нет.
    Ясно и ежу, что проблема в том, что линкер не видит библиотеку ndis.lib.
    Вопрос в том, чей это косяк. И в чем заключается косяк.
     
  4. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    чтобы поломать линковщик, придется залезть слишком глубоко в предмет как линковщик линкует символы в .lib, хотя возможно если это дело разрулить один раз, то решать подобные проблемы и кучу других будет плевым делом, вам так не кажется?
     
  5. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Хотя это последняя крайняя мера
     
  6. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Вот та же хрень у другого была, решил через компиляцию посредством утилиты build. Можно и так но охота через студию, так удобнее
    http://www.wasm.ru/forum/viewtopic.php?id=17070
     
  7. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    делай через билд, тему ты уже нашёл, как делать.
    Если соберется нормально, то дальше ковырять настройки студии. Если не соберется после этого в студии - разбираться с путями и файлами проектов в студии. А взламывать совсем не обязательно.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    neutronion
    добавь саму ndis.lib в свойствах проекта: Linker->Input->Additonal dependencies
     
  10. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Было сделано изначально:
    ntoskrnl.lib int64.lib Hal.lib ndis.lib $(NOINHERIT)
     
  11. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    пробуем через билд...
     
  12. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    придется к студии прикрутить батник, который будет собирать проект через ж... я имел ввиду через build конечно. Подменить кнопку студии build что-ли?
     
  13. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    студию нах. Переходи на SourceInsight
    там кнопке билд можно назначить любое действие
     
  14. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Вариант!...
     
  15. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Хотя уверен там своих косяков хватает.
    Отсюда мораль - старый друг, лучше двух новых.
     
  16. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Между прочим, под дебаггером devenv.exe показал, что вызывает линкер и
    кидает ему файл с настройками /LIBPATH: правильным. Более того
    монитор файлов, тоже показал, что успешно читается ndis.lib. Вот такая
    хрень. Работаю теперь под студией, а компилю билдом. Смешно. Но в студии все же удобно, чтобы не говорили...
     
  17. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    У Вас проблема в том, что собираете код как C++ и имя функции искажается до NdisRegisterProtocol@@YGXPAHPAPAXPAU_NDIS40_PROTOCOL_CHARACTERISTICS@@I@Z

    Надо собирать как чистый C либо объявлять импортируемые функции как
    Код (Text):
    1. extern "C"
    2. {
    3. // здесь объявление
    4. }
     
  18. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    как вариант можно сменить расширение исходника с .срр на .с (где-то читал про такое, что компилятор реагирует и компилит как с, а не срр)
     
  19. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    он реагирует, но это от чего-то зависит, в т.ч. и от компилятора.
    build.exe видимо любые сорцы как чистый C компилирует, а в студии есть такое поле в свойствах файла: C/C++->Advanced->Compile As
     
  20. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    сделал методом брутфорса. Создал батник FireMe.bat в папке проекта с содержимым:
    C:\WINDOWS\system32\cmd.exe /k C:\WINDDK\3790\bin\setenv.bat C:\WINDDK\3790 chk WXP

    Затем сделал изменения в батнике setenv.bat в самом конце
    cd C:\MyProjects\TcpControl\
    build makefile

    теперь одним нажатием на FireMe.bat проект компилится. Редактирую в студии. Косячно, но добавилось одно лишнее движение и теперь об ошибках смотреть придется в консоли.