C++ 别名类符号名

C++ 别名类符号名,c++,C++,我在几个嵌套的名称空间中有一个类,android::hardware::camera::common::V1_0::helper::CameraParameters,我想将其作为android::CameraParameters提供,因此,在编译的二进制文件中,指向该类的符号看起来像\u ZN7android16CameraParameters,而不是\u ZN7android8hardware6camera6common4V1\u 06 helper16cameraparameters。这可能

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


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

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

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;
}
或者(不确定这是否合法)

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

void alias() __attribute__((alias ("toBeAliased")))
或者,您可以将正确的符号传递给链接器:

--defsym=oldname=newname

我认为这不会改变外部可见的符号。我无法使用别名,但名称空间解决方案不起作用。@CozzmyCosmin您是否尝试了
--defsym
?还是有太多的符号无法手动更改我有150个符号。无论如何,我放弃了这个想法,决定用另一种方法来破解它。@JeJo这是我尝试的第一件事,得到的符号仍然是完整的名称空间符号。除了JeJo之外:如果你从
android::hardware::camera::common::V1_0::helper::CameraParameters
派生出
android::camera::parameters
?它可以做成类似“薄包装”的东西。
--defsym=oldname=newname