在dll库中存储和访问数据

时间:2020-08-16 18:32:40

标签: c++

我有一个dll和相关的lib文件,其中包含许多std :: vector实例。

在data.h中,我有:

namespace xyz{
extern DllExport std::vector<double> delays;
...

在data.cpp中,我有:

namespace xyz{
std::vector<double> delays{0, 1, 4, 24, 52, 104};
...

data.cpp被编译并链接到mydata.lib,mydata.dll中,并且延迟似乎在导出时可见:

dumpbin /exports ..\bin\debug\mydata.lib | grep delays
?delays@xyz@@3V?$vector@NV?$allocator@N@std@@@std@@A (class std::vector<double,class std::allocator<double> > xyz::delays)

我编译了program.cpp,其中包括data.h,希望使用延迟等方式。

for (int i = 0; i < xyz::delays.size(); i++)
    std::cout << xyz::delays[i] << std::endl;

试图链接到mydata.lib但我得到了例如

cl  -EHsc -std:c++17 -I../include -Zi -MDd ../src/exe/program.cpp -link -DEBUG ../bin/debug/data.lib /OUT:../bin/debug/program.exe

program.obj : error LNK2001: unresolved external symbol "class std::vector<double,class std::allocator<double> > xyz::delays" (?delays@xyz@@3V?$vector@NV?$allocator@N@std@@@std@@A)../bin/debug/program.exe : fatal error LNK1120: 1 unresolved externals

data.lib,dll中的类定义可以在程序中使用,但是我可以合并一些数据,例如延迟进入lib.dll,以便我可以与在lib,dll上调用的任何程序共享和访问它?

以防使用Windows 10和Microsoft编译器(19.16)和链接器(14.16)的情况不明显。

谢谢...

1 个答案:

答案 0 :(得分:0)

dxiv提供的答案和链接帮助我解决了问题。在我的文件data.h中,我现在有了

name

然后我用-DEXPORTING编译dll.dll