Я работаю над небольшим проектом, чтобы попытаться заставить код Source Engine 2013 работать в IDE Qt Creator. Моя конечная цель — превратить его в проект CMake, чтобы избавиться от ограниченной системы VPC Valve, хотя я пока точно не знаю, как это работает, поэтому я делаю простые шаги.
Я привык к компиляции в компиляторе MSVC ++ 2013, так что это то, что я использую, и я столкнулся с этой последней проблемой, я не знаю, как с этим справиться. Что я собираюсь сделать в первую очередь, если он не компилируется прямо под его намеченным компилятором, я, очевидно, делаю это неправильно, и мне пока не нужно изменять код.
У Valve есть этот memoverride.cpp, в котором есть char * __ cdecl _strdup (const char * string), который, если я его закомментирую, скомпилируется просто отлично, так что это последняя проблема, с которой я столкнулся.
Из этой функции «переопределить» я получаю следующие две ошибки:
C2084: функция ‘char MemAlloc_StrDup (const char) уже есть тело
C2732: спецификация связи противоречит более ранней спецификации для MemAlloc_StrDup
Кто-нибудь знает какую-либо необходимую опцию компилятора, какую-то библиотеку по умолчанию, которую следует исключить, или определение препроцессора, которое я должен использовать, чтобы обойти это? Я попытался скомпилировать код в Visual Studio и отключил подавленный баннер запуска, чтобы я мог видеть все параметры, которые он пропускал, но я попробовал их все, но, похоже, это не имело никакого значения.
Так у кого-нибудь есть идея?
Любая информация будет принята с благодарностью, спасибо!
Проблема с дублирующим определением MemAlloc_StrDup
/ strdup
вероятно, вызвано тем, что вы не можете иметь два определения strdup
, Не существует опции компилятора MSVC ++, которая решает именно это.
Он может «работать» на других компиляторах, потому что правило One Definition Rule не требует от компилятора завершать работу с сообщением о фатальной ошибке или даже выдавать предупреждение. Но MSVC ++ имеет полное право просто отказаться от этого.
MSVC ++ позволяет не связывать свою стандартную библиотеку. Это вряд ли решит вашу проблему, так как это вариант «все или ничего».
Других решений пока нет …