在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文件的名称传递给链接器。