【发布时间】:2015-10-05 10:27:39
【问题描述】:
我的项目是通过几个静态库构建的,这些静态库应该链接到主 dll 库,因此获得了一个 dll。
使用__declspec(dllexport)属性不会导致静态库的指定功能出现在dll中,库根本没有与dll链接。
然后我尝试将每个库构建为共享库,以获取导出函数的正确名称并基于它们创建 .def 文件。使用 .def 文件会导致结果。
在我的情况下,
__declspec(dllexport)和.def-file是否应该同等对待?是否可以从源代码生成 .def 文件?由于我有 C++ 代码,由于 API 中的修饰和存在类,我无法自己编写 .def 文件,因此上述使用临时生成的 dll 的方法与生产不一致。
更新
我想详细解释一下我的项目的结构。该解决方案由几个项目(模块)组成。
+
|
+-+ static_lib1
| +
| +--+ src
|
+-+ static_lib2
| +
| +--+ src
|
+-+ dynamic_lib (linked with static_lib1 and static_lib2)
+
+--+ src
每个子项目都弱依赖于其他子项目,为了清楚起见,我们假设它们没有连接。每个模块都有自己的公共接口。我想将所有模块作为单个动态库,所以我的工件是dynamic_lib.dll,但实际上静态库并没有与之链接。
【问题讨论】:
-
问题:你说
[...] libraries not linked with dll at all。您是否在dynamic_lib或另一个项目 中遇到错误,即使用 dynamic_lib?这个错误是unresolved external [...]吗? -
unresolved external在外部项目中尝试使用 dll 库时
标签: c++ visual-c++ dll visual-studio-2013 declspec