Я столкнулся с проблемой в моем проекте как имени функции 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. Заранее спасибо.
Поскольку вы используете запатентованную библиотеку, вы, вероятно, купили некоторую поддержку для нее. Поэтому используйте линию поддержки. Или переименуйте * свой * 'PropertyNotify' на что-то еще, например' MichaelPropertyNotify' (и это, вероятно, самое простое решение). –
Я не могу получить доступ к исходным файлам, поэтому я не думаю, что могу переименовать функцию или перекомпилировать статическую библиотеку после изменений. Кроме того, я попытался переопределить имя функции другим, используя «objcopy --redefine-sym» на терминале. Это была не очень хорошая идея, так как она перепутала статическую библиотеку и вызвала другие ошибки связывания. –
Я думал о * вашем * коде, а не о FBX. И может случиться так, что у вашей проблемы нет простого решения, поэтому я рекомендую работать с поддержкой, предоставляемой поставщиком FBX. –