从 C 使用 C++ 共享库
Using C++ shared library from C
我在我的 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.
这就是我现在得到它的方式:
$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
$(CPP) $^ -o $@ -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.cpp
$(CPP) -c $< -o $@ -pedantic -g -Wall -fPIC -I.
我应该如何编译我的 C++ 库以便我可以在我的 C 代码中使用它?
那是因为名称修改,函数名称在 c++ 中被修改以提供函数重载,如果您需要在 c 中使用这些函数,请使用 extern "C"
声明函数,这样编译器就不会修改名称的功能。
所以为函数添加这个原型 void function() {}
extern "C" void function();
会做的。而且我假设您可以弄清楚如何修复其他功能。
我在我的 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.
这就是我现在得到它的方式:
$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
$(CPP) $^ -o $@ -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.cpp
$(CPP) -c $< -o $@ -pedantic -g -Wall -fPIC -I.
我应该如何编译我的 C++ 库以便我可以在我的 C 代码中使用它?
那是因为名称修改,函数名称在 c++ 中被修改以提供函数重载,如果您需要在 c 中使用这些函数,请使用 extern "C"
声明函数,这样编译器就不会修改名称的功能。
所以为函数添加这个原型 void function() {}
extern "C" void function();
会做的。而且我假设您可以弄清楚如何修复其他功能。