LINUX.ORG.RU

Сборка vcpm: ошибка: нет декларации ‘stricmp’ в этой области видимости

 , , , vcpm,


0

1

Пытаюсь собрать библиотеку сервера для half-life 2 deathmatch (для дальнейшей модификации).

Публичный sdk: http://hg.alliedmods.net/hl2sdks/hl2sdk-ob-valve/file/4f3ac1d94787

Разумеется в Makefile первая указанная цель vcpm, без него не получится конвертированного проекта.

Сборка падает со следующим выхлопом:

/usr/bin/g++-4.4.6 -I../public -I/usr/include -I../public/tier0 -I../public/tier1 -I../utils/common -DARCH=i486 -DNDEBUG -D_LINUX -DLINUX -DVPROF_LEVEL=1 -DSWDS -D_finite=finite -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -mtune=i686 -march=pentium3 -mmmx -m32 -fno-strict-aliasing -Wall -Wsign-compare -Werror -Wno-conversion -Wno-overloaded-virtual -Wno-non-virtual-dtor -Wno-invalid-offsetof -mfpmath=sse -msse -DHAVE_STDINT_H -fno-rtti -Usprintf -Ustrncpy -UPROTECTED_THINGS_ENABLE -o obj/vcpm/vcprojconvert.o -c ../utils/vprojtomake/vcprojconvert.cpp

In file included from ../public/tier1/utlvector.h:25,

from ../utils/vprojtomake/vcprojconvert.h:14,

from ../utils/vprojtomake/vcprojconvert.cpp:83:

../public/tier1/strtools.h: In function ‘int V_stricmp(const char*, const char*)’:

../public/tier1/strtools.h:101: ошибка: нет декларации ‘stricmp’ в этой области видимости

In file included from ../public/tier1/utlsymbol.h:17,

from ../utils/vprojtomake/vcprojconvert.h:15,

from ../utils/vprojtomake/vcprojconvert.cpp:83:

../public/tier1/utlrbtree.h: In function ‘bool CaselessStringLessThan(const char* const&, const char* const&)’:

../public/tier1/utlrbtree.h:33: ошибка: нет декларации ‘stricmp’ в этой области видимости

Разумеется, #include <string.h> присутствует, но ошибка всё равно вылазит. Дописывание этого инклуда во все указанные файлы не помогает. Версия gcc 4.4.6, судя по описанию должна быть совместима.

В 4.5.3 и 4.6.3 добовляется ../public/tier1/strtools.h:101:87: ошибка: control reaches end of non-void function [-Werror=return-type]

Куда рыть? Может, какой-то флаг запрещает/разрешает использовать stricmp? Или просто задать его через другие стандартные функции?

★★★★★

Последнее исправление: mittorn (всего исправлений: 1)

А кто сказал, что в <string.h> должен быть stricmp? Мне гугл вторым результатом показал, что это нестандартное расширение библиотек Microsoft.

Вторая ошибка возникает оттого, что в какой-то функции забыли сделать return, а в опциях компилятора есть "-Werror=return-type", превративший предупреждение в ошибку.

quiet_readonly ★★★★
()
Ответ на: комментарий от quiet_readonly

А какие-нибудь аналоги есть? Судя по описанию должно в linux и darwin собираться, а там оно используется не раз.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от quiet_readonly

значит надо через -include подключить strings.h :)

Reset ★★★★★
()
Ответ на: комментарий от quiet_readonly

Вторая мне и так понятна, однако странно, что она возникает только в 4.5 и более. А вот stricmp заменён флагами, но почему-то всё равно всплывает. Почему же этот флаг игнорируется? Если бы strcasecmp отсутствовал, ругань была бы именно на него, разве нет?

mittorn ★★★★★
() автор топика

Проблема с объектными файлами решилась дописыванием нужного дефайна и инклада в ../public/tier1/strtools.h, однако теперь это потребовалось слинковать с xerces-c.

Так, как система 64-битная, а поставляемые бинарными библиотеки libtier0_srv.so и vstdlib_i486.so 32-битные, нужен xerces-c 32-битный. Через crossdev сборка разумется валится сразу в начале конфигурации (т. к. это уг). Может где-то можно взять статический libxerces-c.a или libxerces-c.so? Взятая из debian либа выдаёт кучу undefined reference (у меня gentoo).

mittorn ★★★★★
() автор топика
Ответ на: комментарий от mittorn

В попытках собрать xerces-c c -m32 обнаружил там файлы stricmp.c и похожие на них. Похоже где-то там собака зарыта.

mittorn ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.