首先我尝试在 C 中创建简单的共享库并使用 dlopen 调用该库并且工作正常。然后我有一个需求,我可以有一个cpp文件来调用c编译的共享库。
在简单的程序中调用没问题。这是否意味着我们可以在更大的程序中从 C++ 调用 C 创建的库???
在 C++ 中使用 dlopen 的 soe 文档中提到使用 extern ,因为我认为共享库是用 C++ 编写的,因此将其转换为 C Like 。 Aand如果它已经在c中。我们不需要使用 extern 并直接从 C++ 中使用。
我说的对吗??
最佳答案
在所有主要操作系统上,C 和 C++ 编译的函数调用约定是相同的。 C++ 添加的主要区别在于,类成员函数有一个额外的隐式参数(this
指针),并且为了反射(reflect)类型签名而对其名称进行了修饰,因此单个函数名称可以是重载。除了调用函数对 C 和 C++ 的作用相同之外。
当您使用 dlopen
和以后的 dlsym
时,唯一需要注意的是符号的命名。但是,由于您打算访问 C 库 vom C++ 名称修改不是问题;您可以只使用您最初编写的符号标识符。
关于c++ - 我可以使用 dlopen 使用 C 从 C++ 编译的共享库吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29118404/