Линковка OBJ файла к проекту MSVC x64

Тема в разделе "WASM.X64", создана пользователем Felther, 7 янв 2023.

  1. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Всем привет! Есть асм код:
    Код (ASM):
    1. .code
    2. foo proc
    3. mov rax,0h
    4. foo endp
    5. end
    Который компилирую так: ml64 /c foo.asm. Полученные obj файл я линкую к проекту и пытаюсь вызвать функцию foo:
    Код (C):
    1. extern "C" void __fastcall foo();
    2. int main()
    3. {
    4.   foo();
    5. }
    Но компоновщик пишет, что foo - неразрешенный символ. Способ вызова я пробовал ставить stdcall и даже cdecl. Пробовал тоже самое на x32 архитектуре, все норм, а тут на x64 фигня какая то.
     
  2. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    143
    Неразрешённый символ, насколько я понимаю, - это значит, что такое имя символа ("foo") отсутствует в глобальном пространстве имён проекта. Конвенция вызова, тут совершенно непричем, как мне кажется. Наверное надо сперва понять: была ли статическая библиотека прилинкована успешно.
     
  3. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Наверное ты имеешь ввиду был ли успешно прилинкован объектный файл?
     
  4. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    143
    .lib-файл
     
  5. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Ты о чем вообще? Я в проекте статический lib файлы не подключал, разве что lib файлы для экспорта dll. Компоновщик не нашел реализации foo символа, он реализован в obj файле, я его доавлял в доп зависимости, но компоновщик все равно его не видит
     
  6. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    143
    Насколько я знаю, .lib-файл является статической библиотекой, которая содержит имена символов, совершенно необязательно API. Вместо ссылки на именованную API в нём абсолютно спокойно может находиться статичный код, включая произвольные символьные имена. Поправьте, если ошибаюсь
     
  7. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    public foo
     
    HESH нравится это.
  8. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Что это?
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Felther,
    в определении
    Код (ASM):
    1. foo proc
    2.    mov rax,0h
    3.    retn <-- должно быть
    4. foo endp
     
  10. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    143
    ЭТО называется область видимости
     
  11. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
  12. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Добавил. Тоже самое.
    Код (ASM):
    1. public foo
    2.  
    3. .code
    4. foo proc
    5.    mov rax,0h
    6. foo endp
    7. end
     
  13. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    143
    foo proc public
     
  14. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    А объектник к проекту? У меня линкуется.

    Код (Text):
    1. public foo
    2. .code
    3. foo proc
    4. mov rax,0h
    5. foo endp
    6. end
    Тоже можно.
     
  15. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    А у меня почему то нет(
     
  16. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Как вы добавляете объектный файл к проекту?
     
  17. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Да, добавил Свойства проекта -> Компоновщик -> Ввода и в дополнительные зависимости добавил obj файл, сам скомпиленный obj добавил в корень проекта, там где все cpp файлы лежат
     
  18. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Добавьте к дереву файлов проекта, как обычный .cpp или .h.
    Add -> Existing Item или как оно у вас там будет называться.
     
    GRAFik и Felther нравится это.
  19. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Спасибо! Не думал что это нужно делать, т.к когда я делал такое для x86 архитектуры, то все обходилось без добавления в проект
     
  20. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    ormoulu, спасибо за информацию. Вы прям мысли мои читаете или гуляете на моем компьютере - как Моргот по Красной площади в Москве. :) Как о чем-нибудь подумаю - так обязательно об этом на ВАСМе через некоторое время появляется. Мысли-то я как и вы в блокнотик записываю, а он у меня на рабочем столе, а не как у вас в кармане пиджака от Зайцева с Юдашкиным. :)