0

我一直在尝试用我的一些 DSP 类创建一个静态库(.lib)。DSP 类使用 Eigen 库,该库又使用 MKL 和 IPP。

我的问题是我找不到创建这个“独立”静态库的方法,即如果我创建一个应用程序项目,我只需要包含我自己的 DSP 库 .lib 文件和它的头文件( s)。

当我尝试从 IPP 和 MKL 的静态版本中创建一个静态库时,我收到一个 LNK1189 错误,表明超出了允许的符号数量。

到目前为止,唯一有效的是使用 IPP 和 MKL 的动态版本,当然还有将 IPP 和 MKL 的 redist 路径添加到 Windows 环境路径变量中。可悲的是,这取消使用一组头文件(我自己的,引用 ipp 头文件)和我的 .lib 文件的全部意义。

如果不清楚我要做什么,我将非常乐意详细说明。

任何帮助将非常感激。

4

1 回答 1

0

您是指静态库(您的类)和静态 IPP/MKL 的动态库构建吗?那么,由于 DLL 中超过 64K 的符号限制,您无法构建自定义动态库吗?因为,LNK1189 是一个链接器问题。

关于 IPP,我看到的最简单的方法是拒绝将大量 CPU 优化包含到您的动态库中。有一种方法可以说明编译器/链接器从 IPP 中获取什么。

查看您的 IPP 安装中的 tools/staticlib 目录,位于那里的自述文件中。描述了如何最小化自定义 DLL 中的大小以及公共符号的数量。

但是,使用这种方法,您可以只为一种 CPU 架构(例如 SSE42 或 AVX)准备 DLL,因为您的 DLL 中没有 CPU 调度程序。

问候,谢尔盖

于 2016-03-07T10:42:44.597 回答