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

标签 c++ linux xlib fbx

我在我的项目中遇到了一个问题,函数名称 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/

相关文章:

c - 如何从X服务器读取鼠标点击事件

linux - 在Linux下删除/重写/生成键盘事件

c++ - std 或 boost 在某处有 tag<T> 或 type_t<T> 吗?

android - 使用 Android Studio 和 adb 将 android 5.0.2 手机连接到 Fedora 21

linux - 如何将文件复制到远程Linux服务器中的共享帐户

php - 是否可以在现有的Alpine 3.12 Docker镜像上安装PHP7.4?

c++ - 创建一个 C/C++ 应用程序(使用 Xlib)来渲染 SWF 文件

c++ - 有没有办法优化这个 DP 程序中的空间?

c++ - 使用 Matlab 引擎的多线程 C++ 应用程序

c++ - HDMI 连接不发送 WM_DEVICE_ARRIVAL 消息