2016-12-23 19 views
0

Я столкнулся с проблемой в моем проекте как имени функции PropertyNotify() в парах классов, в статической библиотеке FBX уже определено как значение макроинтеста в X11/Xh на Linux ,Переименовать имя функции в статической библиотеке

virtual bool PropertyNotify(eFbxPropertyCallback, KFbxProperty*); //kfbxobject.h 

virtual bool PropertyNotify(eFbxPropertyCallback pType, KFbxProperty* pProperty); //kfbxnode.h 

virtual bool PropertyNotify(EPropertyNotifyType pType, FbxProperty& pProperty); //fbxmanipulators.h 

virtual bool PropertyNotify(eFbxPropertyCallback pType, KFbxProperty* pProperty); //kfbxtexture.h 

#define PropertyNotify  28 //X.h 

FBX не является открытым исходным кодом и предоставляет только включаемые заголовки и статические и динамические библиотеки (.a и .os), поэтому я могу включать только FBX заголовки в моем приложении, но не может касаться исходных файлов. Я думаю, что проблема с именами может быть вызвана ошибкой компиляции «ожидаемый неквалифицированный идентификатор перед числовой константой», который у меня есть.

Я попытался называть «objcopy --redefine-sym PropertyNotify = FbxPropertyNotify libfbxsdk.a», чтобы переопределить имя функции в статической библиотеке. Делая это, ошибка «ожидаемого неквалифицированного идентификатора» была решена, однако она как-то перепутала статическую библиотеку, потому что вызвала сотни неопределенных ошибок ссылок в кодах, где функции или функции FBX вызываются.

Мне интересно, каково решение этой проблемы? Как предложил кто-то, создание обертки библиотеки FBX могло бы решить эту проблему. Если это возможно, было бы очень любезно, если бы кто-нибудь мог поделиться каким-то подробным руководством или руководством по его внедрению на Ubuntu. Заранее спасибо.

+2

Поскольку вы используете запатентованную библиотеку, вы, вероятно, купили некоторую поддержку для нее. Поэтому используйте линию поддержки. Или переименуйте * свой * 'PropertyNotify' на что-то еще, например' MichaelPropertyNotify' (и это, вероятно, самое простое решение). –

+0

Я не могу получить доступ к исходным файлам, поэтому я не думаю, что могу переименовать функцию или перекомпилировать статическую библиотеку после изменений. Кроме того, я попытался переопределить имя функции другим, используя «objcopy --redefine-sym» на терминале. Это была не очень хорошая идея, так как она перепутала статическую библиотеку и вызвала другие ошибки связывания. –

+0

Я думал о * вашем * коде, а не о FBX. И может случиться так, что у вашей проблемы нет простого решения, поэтому я рекомендую работать с поддержкой, предоставляемой поставщиком FBX. –

ответ

1

Возможно, вы можете создать общую библиотеку обертки, которая свяжет libfbx.so. См. this answer (описание построения libabc.so, связанного с lib123.so).

Но вы действительно должны попросить поставщика этой библиотеки FBX для руководства. Возможно, что некоторые из их клиентов столкнулись с подобной проблемой, и они уже выяснили некоторые способы обхода.

(интуитивно, я не рекомендую играть objcopy трюки на фирменной libfbx.so)

Вы также можете настроить компилятор (например, с помощью MELT при работе с GCC ...), чтобы он обрабатывать конкретно некоторые конкретные имена, такие как PropertyNotify (но я не уверен, что это хорошая идея, и это, безусловно, требует нескольких недель усилий).

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