2016-03-29 3 views
-4

Я работаю над небольшим проектом, чтобы попытаться получить код Source Engine 2013, работающий под IDt Qt Creator. Моя конечная цель - превратить его в проект CMake, чтобы выбросить ограниченную систему VPC Valve, хотя я точно не знаю, как это работает, поэтому я делаю простые шаги.Переопределение strdup Функция У меня уже есть тело

Я использую для компиляции под компилятором MSVC++ 2013, так что это то, что я использую, и я столкнулся с этой последней проблемой, я не знаю, как с этим бороться. То, что я собираюсь сделать первым, если оно не компилируется прямо под его предполагаемым компилятором, я, очевидно, делаю это неправильно, и мне не нужно будет изменять код.

Valve имеет этот memoverride.cpp, который имеет char * __ cdecl _strdup (const char * string), который, если я его прокомментирую, код компилируется просто отлично, так что это последний вопрос, с которым я имею дело.

С помощью этой функции «переопределить» Я получаю следующие две ошибки:

C2084: функция «символ MemAlloc_StrDup (Const символ) уже имеет тело

C2732: спецификация связь противоречит ранее спецификации for 'MemAlloc_StrDup'

Кто-нибудь знает какой-либо необходимый параметр компилятора, какую-то библиотеку по умолчанию, которую следует исключить, или определить препроцессор, который я должен использовать, чтобы обойти это? Я попытался скомпилировать код в Visual Studio и отключил подавленный баннер запуска, чтобы я мог видеть все параметры, которые он передавал, но я пробовал их все, но это, похоже, не имело никакого значения.

Значит, у кого-нибудь есть идея?

Любая информация была бы принята с благодарностью, спасибо!

+1

TL, DR. * "memoverride.cpp" * Является ли это C или C++? –

+0

Это C++. Однако, если вы собираетесь предложить изменить код с помощью extern «C» или что-то еще, это не тот ответ, который я ищу. И давай, это не так долго. –

+1

Да, это просто вафли. * «Я привык к компиляции под компилятором MSVC++ 2013, так вот что я использую» * –

ответ

0

Проблема, которую вы имеете с дублирующимся определением MemAlloc_StrDup/strdup, вероятно, вызвана тем, что у вас не может быть двух определений strdup. Не существует опции компилятора MSVC++, которая решает именно это.

Он может «работать» с другими компиляторами, потому что правило One Definition не требует, чтобы компилятор завершил работу с фатальным сообщением об ошибке или даже дал предупреждение. Но MSVC++ полностью вправе просто отвергнуть это.

MSVC++ позволяет не связывать свою стандартную библиотеку. Это вряд ли решит вашу проблему, поскольку это вариант «все или ничего».

Смежные вопросы