2014-08-26 2 views
0

Я пытаюсь использовать движок Bullet Physics в своем проекте и испытываю проблемы при связывании.MSVC Название mangling and linking (using Bullet Physics)

Этот символ не доступен (ошибка линкера):

"" пустота * __cdecl btAlignedAllocInternal (без знака __int64, целое) "(btAlignedAllocInternal @@ YAPEAX_KH @ Z?)" В Funktion "" общественности: статические аннулируются * __cdecl btCollisionObject :: оператор новый (без знака __int64) "(?? 2btCollisionObject @@ SAPEAX_K @ Z)"

Я использовал

E: \ SDKs \ пулей 2,82-r2704 \ Lib > Демпфинг/символы Bulle tDynamics.lib | Findstr/R/ C: "btAlignedAllocInternal"

, чтобы проверить, если символ доступен, результат:

17F 00000000 UNDEF notype() Внешняя | ? BtAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 121 00000000 UNDEF notype () Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 07A 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 0AF 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 0B6 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 07F 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 308 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 16B 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 279 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 2C7 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 3C6 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 249 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 675 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 39E 00000000 UNDEF notype() Внешний | ? btAlignedAllocInternal @@ YAPAXIH @Z (void * __cdecl btAlignedAllocInternal (unsigned int, int)) 24D 00000000 UNDEF notype() Внешний | ? BtAlignedAllocInternal @@ YAPAXIH @Z (аннулируются * __cdecl btAlignedAllocInternal (неподписанных INT, INT))

Для меня это выглядит как символ не доступен (не соответствующие подогнанных имен), но я должен признаться, Я действительно не знаю, как создаются измененные имена символов.

Можете ли вы объяснить, где различия между YAPAXIH и YAPEAX_KH? Или у кого-нибудь есть другое предположение, что может быть неправильным?

+0

Посмотрите на demangler: http://demangler.com/ BTW, обычно проблемы с компоновщиками решаются более простым способом. Например, вы добавили файл .lib в список зависимостей компоновщика? –

+0

Благодарим вас за demangler.com. Да, если я удалю .lib, я получаю другую ошибку. – Dirk

+0

Некоторые проблемы с битностью? Глядя на демарнированные функции, которые вы опубликовали, возможно, это совместимость с x86-x64. –

ответ

2

Название mangling кажется довольно неясным для MSVC. Я использовал demangler.com и получил следующее:?

для btAlignedAllocInternal @@ YAPEAX_KH @ Z

аннулируются * __ptr64 __cdecl btAlignedAllocInternal (без знака __int64, Int)

для btAlignedAllocInternal @@ YAPAXIH @ Z

аннулируются * __cdecl btAlignedAllocInternal (неподписанных INT, INT)

Определение функции является

void* btAlignedAllocInternal(size_t size, int alignment); 

Это ясно указывает на то, что проблема x64/x86 существует. Действительно, пуля была построена с использованием x86.

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