使用C语言的C++共享库

ale*_*nst 2 c c++ gcc shared-libraries

我有一个C库,我在我的C应用程序中使用,带有dlopen一个dlsym.一切正常,但我将C库重写为C++,现在我的主应用程序停止使用库.

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

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

$(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.
Run Code Online (Sandbox Code Playgroud)

这就是我现在的方式:

$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
    $(CPP) $^ -o $@ -shared

$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.cpp
    $(CPP) -c $< -o $@ -pedantic -g -Wall -fPIC -I.
Run Code Online (Sandbox Code Playgroud)

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

Iha*_*imi 7

这是因为名称修改,函数名称在c ++中被修改以提供函数重载,如果你需要在c中使用这些函数,则声明函数,extern "C"这样编译器就不会破坏函数的名称.

所以添加这个原型的功能 void function() {}

extern "C" void function();
Run Code Online (Sandbox Code Playgroud)

会做的.我假设您可以弄清楚如何修复其他功能.