Всем привет! Есть асм код: Код (ASM): .code foo proc mov rax,0h foo endp end Который компилирую так: ml64 /c foo.asm. Полученные obj файл я линкую к проекту и пытаюсь вызвать функцию foo: Код (C): extern "C" void __fastcall foo(); int main() { foo(); } Но компоновщик пишет, что foo - неразрешенный символ. Способ вызова я пробовал ставить stdcall и даже cdecl. Пробовал тоже самое на x32 архитектуре, все норм, а тут на x64 фигня какая то.
Неразрешённый символ, насколько я понимаю, - это значит, что такое имя символа ("foo") отсутствует в глобальном пространстве имён проекта. Конвенция вызова, тут совершенно непричем, как мне кажется. Наверное надо сперва понять: была ли статическая библиотека прилинкована успешно.
Ты о чем вообще? Я в проекте статический lib файлы не подключал, разве что lib файлы для экспорта dll. Компоновщик не нашел реализации foo символа, он реализован в obj файле, я его доавлял в доп зависимости, но компоновщик все равно его не видит
Насколько я знаю, .lib-файл является статической библиотекой, которая содержит имена символов, совершенно необязательно API. Вместо ссылки на именованную API в нём абсолютно спокойно может находиться статичный код, включая произвольные символьные имена. Поправьте, если ошибаюсь
А объектник к проекту? У меня линкуется. Код (Text): public foo .code foo proc mov rax,0h foo endp end Тоже можно.
Да, добавил Свойства проекта -> Компоновщик -> Ввода и в дополнительные зависимости добавил obj файл, сам скомпиленный obj добавил в корень проекта, там где все cpp файлы лежат
Добавьте к дереву файлов проекта, как обычный .cpp или .h. Add -> Existing Item или как оно у вас там будет называться.
Спасибо! Не думал что это нужно делать, т.к когда я делал такое для x86 архитектуры, то все обходилось без добавления в проект
ormoulu, спасибо за информацию. Вы прям мысли мои читаете или гуляете на моем компьютере - как Моргот по Красной площади в Москве. Как о чем-нибудь подумаю - так обязательно об этом на ВАСМе через некоторое время появляется. Мысли-то я как и вы в блокнотик записываю, а он у меня на рабочем столе, а не как у вас в кармане пиджака от Зайцева с Юдашкиным.