如何在c++中导出另一个文件中的预定义函数以共享(例如dll或so)



在c++中,是否有可能编写代码/Makefile将函数从预先编写的c++文件导出到共享对象-即DLL/SO文件。

作为一个例子,让我们假设我有以下文件和函数定义:

# funcs.cpp
int add(int x, int y)
{
return x + y;
}
要创建一个Windows DLL,我可以通过将第一行更改为: 来修改上面的内容:
extern "C" __declspec(dllexport) int add(int x, int y)

和使用包含:

的Makefile
#Makefile
dll: funcs.cpp
g++ -shared funcs.cpp -o output.dll

但是,对于我不能修改funcs.cpp文件的情况,这是可能的吗?例如,我如何将预先编写的函数打包成共享对象?

注意:这个问题在这里已经回答过了:使用dllexport从DLL导出函数然而,这个问题是不同的,目前尚不清楚如何导出到DLL而不添加_declspec(dllexport)到原来的cpp文件。如果这很容易,我实际上错过了一些东西,也许有人可以张贴答案或其他方式,问题可以重新打开请?

导出函数有几种方法,如下所示:https://learn.microsoft.com/en-us/cpp/build/reference/export-exports-a-function?view=msvc-160

不用修改源代码就可以使用的两个是:

  • .def文件中的EXPORTS语句
  • LINK命令中的/EXPORT规范

微软说前者比后者更受欢迎,我同意。只需创建一个.def文件传递给链接器。它的内容将像这样:

LIBRARY foo
EXPORTS
add

使用/DEF选项将.def文件的名称传递给链接器。

相关内容

最新更新