Здравствуйте, коллеги!
Стал тут компилировать свой код в MINGW GCC4.4.1, получаю ошибки
multiple definition of forbiddenExp
multiple definition of emptyExp
В чем проблема, никто не подскажет?
static // добавил, не помогло
inline
ilint_t interlockedExchangeAdd(ilint_t ILVOLATILE *dst, ilint_t addval)
{ // multiple definition of forbiddenExp показывает сюда
// ...
}
class CGenericRefCounter
{
ilint_t ILVOLATILE counter;
public:
CGenericRefCounter() : counter(0) {}
CGenericRefCounter(int i) : counter(i) {}
//CRefCounter(ilint_t c) : counter(c) {}
CGenericRefCounter(const CGenericRefCounter &rc) : counter(rc.counter) {}
operator ilint_t() const { return counter; } // multiple definition of emptyExp показывает сюда
/// ...
};
M>M>multiple definition of forbiddenExp
M>multiple definition of emptyExp
В приведенном тобой коде не встречаются идентификаторы, на которые ругается линкер. Приведи релевантный код.
Здравствуйте, Vamp, Вы писали:
V>В приведенном тобой коде не встречаются идентификаторы, на которые ругается линкер. Приведи релевантный код.
Вот такой вывод линкера. forbiddenExp/emptyExp вообще нигде не встречаются у меня, а строки исходника по указанному в сообщении об ошибке адресу я привел
Linking console executable: ..\..\..\out\win32(mingw)\CodeBlocks\debug\nmdlc2.exe
..\..\..\out\win32(mingw)\CodeBlocks\debug\_nmdlc2\src\npl3\nmeagen\nmdlDefs.o: In function `interlockedExchangeAdd':
F:\work\navis\trunk\build\win32(mingw)\npl/../../../include/cli/interlocked.h:217: multiple definition of `forbiddenExp'
..\..\..\out\win32(mingw)\CodeBlocks\debug\_nmdlc2\src\npl3\nmeagen\nmdlc2.o:F:\work\navis\trunk\build\win32(mingw)\npl/../../../include/cli/interlocked.h:217: first defined here
..\..\..\out\win32(mingw)\CodeBlocks\debug\_nmdlc2\src\npl3\nmeagen\nmdlDefs.o: In function `interlockedExchangeAdd':
F:\work\navis\trunk\build\win32(mingw)\npl/../../../include/cli/refcnt.h:111: multiple definition of `emptyExp'
..\..\..\out\win32(mingw)\CodeBlocks\debug\_nmdlc2\src\npl3\nmeagen\nmdlc2.o:F:\work\navis\trunk\build\win32(mingw)\npl/../../../include/cli/interlocked.h:217: first defined here
Здравствуйте, Vamp, Вы писали:
Этот GCC такой GCC
Нашел в хидерах libxml2:
XMLPUBVAR xmlExpNodePtr forbiddenExp;
XMLPUBVAR xmlExpNodePtr emptyExp;
Как побороть без правки чужих хидеров?
M>Нашел в хидерах libxml2:
M>M>XMLPUBVAR xmlExpNodePtr forbiddenExp;
M>XMLPUBVAR xmlExpNodePtr emptyExp;
M>
Вот что раскрывается XMLPUBVAR?
Здравствуйте, Vamp, Вы писали:
V>Вот что раскрывается XMLPUBVAR?
Разобрался, в libxml2 в хидерах что-то не так для MinGW было, может косяк, может так и задумано было для старых версий mingw.
Для других компиляторов выделенное было, для мингв я добавил, и заработало.
Меня сбило с толку, что студия ошибку показывала на мой код. Хотя, при ошибках во время линковки такое бывает иногда.
#if defined(_WIN32) && defined(__MINGW32__)
#undef XMLPUBFUN
#undef XMLPUBVAR
#undef XMLCALL
#undef XMLCDECL
/*
* if defined(IN_LIBXML) this raises problems on mingw with msys
* _imp__xmlFree listed as missing. Try to workaround the problem
* by also making that declaration when compiling client code.
*/
#if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
#define XMLPUBFUN __declspec(dllexport)
#define XMLPUBVAR __declspec(dllexport)
#else
#define XMLPUBFUN
#if !defined(LIBXML_STATIC)
#define XMLPUBVAR __declspec(dllimport) extern
#else
#define XMLPUBVAR extern
#endif
#endif
#define XMLCALL __cdecl
#define XMLCDECL __cdecl
#if !defined _REENTRANT
#define _REENTRANT
#endif
#endif