我在我的项目中遇到了一个问题,作为函数名,PropertyNotify()在几个类中,在FBX静态库中已经被定义为Linux上X11 / X.h中的宏int值。
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标题但不能触及源文件。我认为命名问题可能是编译错误引起的"期望在数字常量之前的非限定id"我有。
我试过调用" objcopy --redefine-sym PropertyNotify = FbxPropertyNotify libfbxsdk.a"以便在静态库中重新定义函数名称。通过这样做,"预期的不合格身份"错误已经解决了,但是,似乎某种程度上搞乱了静态库,因为它在FBX函数或被调用对象的代码中导致了数百个未定义的引用错误。
我想知道这个问题的解决方案是什么?正如某人所建议的,创建FBX库的包装器可能可以解决问题。如果可能的话,如果有人可以分享一些关于如何在Ubuntu上实现它的详细教程或指导,那将是非常友好的。提前致谢。
答案 0 :(得分:1)
也许您可以创建一个包装{@ 1}}的包装器共享库。请参阅this answer(说明如何构建与libfbx.so
相关联的libabc.so
。
但是你真的应该向FBX库的供应商寻求指导。可能是他们的其他一些客户遇到了类似的问题,他们已经找到了一些解决方法。
(直觉上,我不建议在专有lib123.so
上播放objcopy
技巧
您也可以自定义您的编译器(例如,如果使用MELT,则使用GCC ...)以使其具体处理某些特定名称,例如libfbx.so
(但我不确定它)是一个好主意,它肯定需要数周的努力。)