我的项目通过几个静态库进行构建,这些库应该链接到主dll库中,以便作为结果获得一个单一的dll。
使用__declspec(dllexport)
属性不会导致静态库的指定函数出现在dll中,根本没有将库链接到dll。
然后我尝试将每个库构建为共享库,以获取导出函数的正确名称,并基于它们创建.def文件。使用.def文件导致了结果。
在我的情况下,
__declspec(dllexport)
和.def文件
应该起到同样的作用吗?是否可以从源代码生成.def文件?由于我的代码是C++代码,我无法自己编写.def文件,因为需要进行名称修饰并包含API中的类,上述描述的使用临时生成的dll的方法对于生产来说不一致。
更新
我想详细解释一下我的项目结构。解决方案由几个项目(模块)组成。
+
|
+-+ static_lib1
| +
| +--+ src
|
+-+ static_lib2
| +
| +--+ src
|
+-+ dynamic_lib (linked with static_lib1 and static_lib2)
+
+--+ src
每个子项目都弱依赖于其他项目,为了清晰起见,我们假定它们之间没有联系。每个模块都有自己的公共接口。我希望将所有模块打包成一个动态库,所以我的构件是dynamic_lib.dll
,但实际上静态库没有与它链接。
dynamic_lib
或另一个项目中遇到了错误,该项目正在使用dynamic_lib
吗?这个错误是“未解决的外部[...]”吗? - Mateusz Grzejek