首页 > 解决方案 > 别名类符号名称

问题描述

我在几个嵌套的命名空间中有一个类android::hardware::camera::common::V1_0::helper::CameraParameters,我想将其作为 提供android::CameraParameters,因此,在编译的二进制文件中,指向该类的符号看起来像_ZN7android16CameraParameters而不是_ZN7android8hardware6camera6common4V1_06helper16CameraParameters. 这可能吗?

我需要这样做以在不编辑源文件的情况下向另一个(预构建,没有可用的源代码,库)提供一些缺失的符号。

标签: c++

解决方案


您可以定义命名空间别名:

namespace foo {
    namespace bar {
         namespace something {
             //code
         }
    }
}

namespace alias = foo::bar::something;

现在您可以使用alias而不是foo::bar::something

因此,在您的情况下,只需添加以下内容:

namespace android {
    namespace CameraParameters = hardware::camera::common::V1_0::helper::CameraParameters;
}

或(不确定这是否合法)

namespace android::CameraParameters = android::hardware::camera::common::V1_0::helper::CameraParameters;

编辑:要确保符号指向该类,您可以使用gcc别名:

void alias() __attribute__((alias ("toBeAliased")))

或者您可以通过将正确的符号传递给链接器来做到这一点:

--defsym=oldname=newname

推荐阅读