Исправление и связывание имен MSVC (используя Bullet Physics)

0

Я пытаюсь использовать движок Bullet Physics в своем проекте и испытываю проблемы при связывании.

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

"" void * __cdecl btAlignedAllocInternal (unsigned __int64, int) "(? btAlignedAllocInternal @@YAPEAX_KH @Z)" in Funktion "" public: static void * __cdecl btCollisionObject :: operator new (unsigned __int64) "(? 2btCollisionObject @@SAPEAX_K @Z)"

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

E:\SDKs\bullet-2.82-r2704\lib> dumpbin/symbols BulletDynamics.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 (void * __cdecl btAlignedAllocInternal (unsigned int, int))

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

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

  • 0
    Посмотрите на demangler: demangler.com Кстати, обычно проблемы с линкерами решаются более простым способом. Например, вы добавили файл .lib в список зависимостей компоновщика?
  • 0
    Спасибо за demangler.com. Да, если я удаляю .lib, я получаю другую ошибку.
Показать ещё 4 комментария
Теги:
linker
bulletphysics
name-mangling

1 ответ

2

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

для? btAlignedAllocInternal @@YAPEAX_KH @Z

void * __ptr64 __cdecl btAlignedAllocInternal (без знака __int64, int)

for? btAlignedAllocInternal @@YAPAXIH @Z

void * __cdecl btAlignedAllocInternal (unsigned int, int)

Определение функции

void* btAlignedAllocInternal(size_t size, int alignment);

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню