gpt4 book ai didi

c++ - 在静态库中重新定义函数名称

转载 作者:太空宇宙 更新时间:2023-11-04 10:26:37 26 4
gpt4 key购买 nike

我在我的项目中遇到了一个问题,函数名称 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 头文件而不能触及源文件。我认为命名问题可能是我得到的编译错误“expected unqualified-id before numeric constant”引起的。

我尝试调用“objcopy --redefine-sym PropertyNotify=FbxPropertyNotify libfbxsdk.a”以重新定义静态库中的函数名称。通过这样做,解决了“expected unqualified-id”错误,但是,它似乎以某种方式弄乱了静态库,因为它在调用 FBX 函数或对象的代码中导致了数百个 undefined reference 错误。

我想知道这个问题的解决方案是什么?正如某人所建议的那样,创建 FBX 库的包装器可能可以解决问题。如果可能的话,如果有人可以分享一些关于如何在 Ubuntu 上实现它的详细教程或指导,那将是非常好的。提前致谢。

最佳答案

也许您可以创建一个包装器共享库来链接 libfbx.so。参见 this answer (描述如何构建链接到 lib123.solibabc.so)。

但您确实应该向该 FBX 库的供应商寻求指导。可能是他们的其他一些客户遇到了类似的问题,并且他们已经找到了一些解决方法。

(直觉上,我不建议在专有的 libfbx.so 上玩 objcopy 把戏)

您还可以自定义您的编译器(例如,如果使用 MELT 则使用 GCC ...)让它专门处理一些特定的名称,例如 PropertyNotify(但我不确定它是一个好主意,当然需要数周的努力)。

关于c++ - 在静态库中重新定义函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41305401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com