кроме фанатов ассемблера его никто не решит.
Проблема в том что MSVC2015-2022 упорно тянут из своего CRT функции _memcpy и _memset.
И если выкинуть CRT (указав явно точку входа через /ENTRY) то возникают проблемы:
Строки типа WCHAR buff1[25] = { 0 }; приводят к ошибке LNK2001 неразрешенный внешний символ _memset
Строки CopyMemory/RtlCopyMemory/memcpy - приводят к ошибке LNK2001 неразрешенный внешний символ _memcpy
На форумах аналогичные вопросы обсуждаются уже лет 10 (нагуглил по LNK2001 и _memset), но решения нет, советы типа собственную _memcpy/_memset написать, но MSVC не даёт собственные функции с такими именами подключить. #pragma intrinsic(memset, memcpy) - в x86 или x64 не работает.
Пока избавляюсь от зависимостей делая разные костыли из интринсиков (например __movsd, __stosd).
Но может кто-то знает как по простому решить эту проблему (приделать _memset и _memcpy или заставить студию брать их из ntdll например) глобально?
Как не даёт подключить?
Кто мешает взять тот же фасм и собрать там объектник с public memset as '_memset'? Внутри хоть ntdll, хоть stosd/stosb. И уже с этим объектником линковаться вместо стандартной либы.
Да, такое решение работает нормально, проверил. Однако это непрозрачность исходников получается. Ещё отдельные obj для 32 и 64. Ещё лишняя секция в PE (хотя можно слияние секций задать в принципе). Хотелось бы решать ситуацию какими-то командами в C, без привязки к fasm или masm. Чтобы линкер брал бы '_memset' из winapi-функций (например недокументированную memset из msvcrt.dll), а не подсовывать ему obj-файл с '_memset'
В чём проблема отдельных .obj? Не вручную же собирать! Никакой лишней секции нет, в исходнике на фасме можно задать любое имя секции и атрибуты. Не нравится фасм — есть ml (да, masm, но он же в комплекте есть, в чём проблема-то?). Если можно msvcrt.dll, тогда вообще всё просто — сделай или возьми старую библиотеку импорта и линкуйся с ней. Ещё можно сделать old-style импорт-либу (если, конечно, они ещё поддерживаются современными компиляторами), в которой можно пихать в директорию импортов что угодно, и наружу оно будет торчать с каким угодно именем.
Обсуждают сегодня