Драсте, помогите чайнику использовать в своем проекте OBJ-файл скомпиленый например в fasm. Для теста делаю так: Взял стандартный пример из пакета fasm Код (Text): format MS COFF extrn '__imp__MessageBoxA@16' as MessageBox:dword section '.text' code readable executable public _demo _demo: push 0 push _caption push _message push 0 call [MessageBox] ret section '.data' data readable writeable _caption db 'Win32 assembly',0 _message db 'Coffee time!',0 MSCOFF.OBJ в своем проекте добавил файл, и добавил пармаетры линкера /DEF:"MSCOFF.OBJ" /ASSEMBLYMODULE:"MSCOFF.OBJ" пересобираю, смотрю в выходном ехе появилас в импорте MessageBox. добавляю вызов в C++ Код (Text): #include <iostream> extern void _demo(); int main() { std::cout << "Hello World!\n"; _demo(); } не собирается.. 1>------ Перестроение всех файлов начато: проект: ConsoleApplication, Конфигурация: Debug Win32 ------ 1>ConsoleApplication.cpp 1>MSCOFF.OBJ : warning LNK4017: оператор L не поддерживается на конечной платформе; пропущен 1> Создается библиотека C:\DEVELOPMENT\ConsoleApplication\Debug\ConsoleApplication.lib и объект C:\DEVELOPMENT\ConsoleApplication\Debug\ConsoleApplication.exp 1>ConsoleApplication.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl _demo(void)" (?_demo@@YAXXZ) в функции _main 1>C:\DEVELOPMENT\ConsoleApplication\Debug\ConsoleApplication.exe : fatal error LNK1120: неразрешенных внешних элементов: 1 1>Сборка проекта "ConsoleApplication.vcxproj" завершена с ошибкой. ========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ========== Что именно ему не нравится?
Потому что в рабочей версии нужно линковать много скомпиленых на fasm OBJ-файлов. ассемблерные вставки не годятся. да и в x64 их нет. это не понятно, чего не должно быть? заменил _demo на MyDemo - не помогло! да это сстрочку вообще убрать можно, она не причем!
Ошибка LNK2019 ссылка на неразрешенный внешний символ __demo в функции _main ConsoleApplication C:\DEVELOPMENT\ConsoleApplication2\ConsoleApplication\ConsoleApplication.obj 1
О, хоспаде. extern "C" void demo() --- Сообщение объединено, 15 июл 2020 --- Неужели нельзя прочитать сообщение линкера и понять, что он ищет __demo, а у тебя символ _demo?