标签: name-mangling

避免在linux下的共享对象C接口上进行名称修改

在Windows下,我们有一个C接口(extern"C"{// interface})到我们的C++库,它使用模块定义文件(.def)导出未编码的函数.

我试图在linux下重新创建相同的东西,我相对缺乏经验.据我所知,在NIX系统下,默认情况下会导出所有函数.考虑到这一点,我创建了一个共享对象,我通过nm命令运行.

我很惊讶地看到,与Windows不同,我的功能名称已被破坏!

我该怎么办呢?

c c++ linux name-mangling shared-objects

1
推荐指数
1
解决办法
2326
查看次数

使用g ++如何链接使用gcc构建的库?

我试图将使用gcc构建的.a库链接到使用g ++构建的程序.但是这个名字不同.我怎样才能做到这一点?谢谢,CP

linker gcc g++ name-mangling

0
推荐指数
1
解决办法
340
查看次数

如何在Objective-C中获取方法的函数名?

据我所知,一个方法被编译成这样的函数:

+(NSArray *)arrayWithObject:(id)object;
// becomes
NSArray *_c_NSArray_arrayWithObject_(id object);
Run Code Online (Sandbox Code Playgroud)

是否有可能获得选择器函数的名称,以便我可以将该方法作为参数传递给C函数,或者这是不可能的?

c methods function objective-c name-mangling

0
推荐指数
1
解决办法
2447
查看次数

名称以两个下划线开头的实例属性被奇怪地重命名

根据我的类的当前实现,当我尝试使用类方法获取私有属性的值时,我将其None作为输出。关于我哪里出错的任何想法?

代码

from abc import ABC, abstractmethod

class Search(ABC):
    @abstractmethod
    def search_products_by_name(self, name):
        print('found', name)


class Catalog(Search):
    def __init__(self):
        self.__product_names = {}
    
    def search_products_by_name(self, name):
        super().search_products_by_name(name)
        return self.__product_names.get(name)


x = Catalog()
x.__product_names = {'x': 1, 'y':2}
print(x.search_products_by_name('x'))
Run Code Online (Sandbox Code Playgroud)

python private double-underscore name-mangling

0
推荐指数
1
解决办法
87
查看次数

如何强制编译器将C名称转换为C++名称

我有.obj函数,它具有需要作为C++成员函数链接的所有东西.问题是,它在C中,因此使用它的类需要比正常名称更丑的东西.因此,我认为这只能通过两种方式完成:要么破坏C函数的名称和/或在符号表中添加额外的符号,否则它仍会使用它的原始名称.所以我仍然可以使用它的原始名称..所以基本上是这个名字.任何想法如何做到这一点或有一些完全其他方式来解决这个问题?请分享但是考虑在这个特殊情况下说extern"C"的有用性:))thx

c c++ windows symbols name-mangling

-1
推荐指数
1
解决办法
421
查看次数