Static Visual Studio中包含IPP和MKL的静态库

Static Visual Studio中包含IPP和MKL的静态库,static,eigen,intel-ipp,Static,Eigen,Intel Ipp,我一直在尝试用我的一些DSP类创建一个静态库(.lib)。DSP类使用特征库,而特征库又使用MKL和IPP 我的问题是,我找不到一种方法来创建这个“独立”的静态库,也就是说,如果我创建一个应用程序项目,我只需要包含我自己的DSP library.lib文件及其头文件 当我试图用IPP和MKL的静态版本创建静态库时,我得到一个LNK1189错误,即超出了允许的符号数 到目前为止,唯一有效的方法是使用IPP和MKL的动态版本,当然,还要将IPP和MKL的redist路径添加到Windows环境路径变

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

我的问题是,我找不到一种方法来创建这个“独立”的静态库,也就是说,如果我创建一个应用程序项目,我只需要包含我自己的DSP library.lib文件及其头文件

当我试图用IPP和MKL的静态版本创建静态库时,我得到一个LNK1189错误,即超出了允许的符号数

到目前为止,唯一有效的方法是使用IPP和MKL的动态版本,当然,还要将IPP和MKL的redist路径添加到Windows环境路径变量中。遗憾的是,这取消了使用一组头文件(我自己的,引用ipp头文件)和我的.lib文件的整个要点

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


非常感谢您的帮助。

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

关于IPP,我认为最简单的方法是拒绝在动态库中包含大量CPU优化。有一种方法可以告诉编译器/链接器从IPP中获取什么

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

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

问候,,
谢尔盖

你好,谢尔盖,谢谢你的回答。错误的本质是这样的。我选择的解决方案是一个静态库,它包含运行我自己的DSP类而不是DLL所需的一切,并且不必选择特定的体系结构。这方面的一个例子是:如果我使用ippsThreshold_64,我希望所有体系结构都包含在我的.lib文件中,而不是我从未使用过的ippsThreshold_32。创建一个使用IPP功能的静态库是否仍在根据体系结构分配正确的版本?创建一个由其他静态库中的模块组成的静态库并不容易。为此,您需要知道需要从其他库中提取哪些特定的对象模块,然后将其放入您的库中。顺便说一下,这正是链接器在构建DLL时所做的。它不需要比需要更多的功能。如果没有使用Threshold_32函数并从lib中调用(直接或间接),则不能将其包含在自定义DLL中,除非该函数是从其他IPP函数内部调用的。是的,我找到了困难的方法。目前,我只打算静态连接第三方库,以减少“设置”的麻烦。您成功地做到了吗?@Royi No,我最终不得不将我的DSP类构建为一个独立于其他库的库。这最终也更有意义。