我怎样才能制作一个使用 openmp 并用英特尔的 C 编译器编译的二进制文件?
How can I make a binary that uses openmp and compiled with intel's C compiler portable?
通常我会像这样使用 intel oneapi 命令提示符编译代码(全部在一个文件中 main.c)
icl.exe main.c -o binary_name
然后我可以 运行 binary_name.exe 而不会出现来自常规命令提示符的问题。但是,当我最近利用openmp多线程并像这样编译时。
icl.exe main.c -o binary_name /Qopenmp /MD /link libiomp5md.lib
然后,当我尝试通过普通命令提示符 运行 它时,我收到以下消息:
我最终想移动这个简单的代码(比如,移动到另一台具有相同 OS 的计算机)。是否有一些通过命令提示符或批处理文件来打包和链接动态库的过程? windows
也不支持 openmp 的静态链接
要么制作静态链接版本,要么将依赖 DLL 文件与 EXE 文件一起分发。
您可以使用 Dependency Walker 检查您的 EXE 的依赖项。
如您正确所述,Windows 不支持 OpenMP 的静态链接。根据您的用例,您有几个选择。简单测试的最简单方法是将 Dynamic-Link 库与您的可执行文件一起发送,并将其放在目标系统的同一目录中。在使用 DLL 构建了大量系统之后,大多数开发人员通常会这样做,以确保其代码在生产环境中的功能。
如果您想在目标系统上做一些更复杂的事情,您可以将 Dynamic-Link 库放在共享位置并按照 Microsoft Build 站点的搜索顺序建议进行操作:
https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
通常我会像这样使用 intel oneapi 命令提示符编译代码(全部在一个文件中 main.c)
icl.exe main.c -o binary_name
然后我可以 运行 binary_name.exe 而不会出现来自常规命令提示符的问题。但是,当我最近利用openmp多线程并像这样编译时。
icl.exe main.c -o binary_name /Qopenmp /MD /link libiomp5md.lib
然后,当我尝试通过普通命令提示符 运行 它时,我收到以下消息:
我最终想移动这个简单的代码(比如,移动到另一台具有相同 OS 的计算机)。是否有一些通过命令提示符或批处理文件来打包和链接动态库的过程? windows
也不支持 openmp 的静态链接要么制作静态链接版本,要么将依赖 DLL 文件与 EXE 文件一起分发。
您可以使用 Dependency Walker 检查您的 EXE 的依赖项。
如您正确所述,Windows 不支持 OpenMP 的静态链接。根据您的用例,您有几个选择。简单测试的最简单方法是将 Dynamic-Link 库与您的可执行文件一起发送,并将其放在目标系统的同一目录中。在使用 DLL 构建了大量系统之后,大多数开发人员通常会这样做,以确保其代码在生产环境中的功能。
如果您想在目标系统上做一些更复杂的事情,您可以将 Dynamic-Link 库放在共享位置并按照 Microsoft Build 站点的搜索顺序建议进行操作:
https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order