使用 C 中的C++共享库

Using C++ shared library from C

本文关键字:共享 C++ 中的 使用      更新时间:2023-10-16

我有一个C库,我正在使用我的C应用程序,dlopen dlsym。一切正常,但我重写了 C 库以C++,现在我的主应用程序停止使用该库。

它找不到符号(函数),即使代码完全相同,只是我改变了编译方法。

这就是我之前获得库的方式:

$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
    $(CC) $^ -o $@ -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.c
    $(CC) -c $< -o $@ -pedantic -g -Wall -std=gnu99 -fpic -I.

这就是我现在得到它的方式:

$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
    $(CPP) $^ -o $@ -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.cpp
    $(CPP) -c $< -o $@ -pedantic -g -Wall -fPIC -I.

我应该如何编译 mmy C++ 库,以便我可以从我的 C 代码中使用它?

这是因为名称重整,函数名称在 c++ 中被破坏以提供函数重载,如果您需要在 C 中使用这些函数,请使用 extern "C" 声明函数,以便编译器不会破坏函数的名称。

因此,为函数添加此原型void function() {}

extern "C" void function();

会这样做。我假设你可以弄清楚如何修复其他功能。