如何使用 NAG C Windows DLL 算法库
本页的资讯适用于 NAG C 算法库第 9 版的 DLL 文件 (CLW3209DAL),除非另有说明。
自命令行中编译使用
以下的说明中,driver.c 文件表示的是您的应用程序名称,并且路径与 NAG C DLL 算法库同一个位置。
- Microsoft Visual C++
cl /MD /I"install dir\include" driver.c "install dir\lib\CLW3209DA_nag.lib"
"/MD" 参数必须要指定来链接 MSVCRT.LIB 文件。
此外,若您想要链接到搭配 MKL 的 NAG C 算法库版本,您必须以下面的方式编译:
cl /MD /I"install dir\include" driver.c "install dir\lib\CLW3209DA_mkl.lib"
如果链接到的文件路径已经加入在环境变量 LIB 中,且 include 目录也已加入 INCLUDE 环境变量中,编译命令可以分别简化为:
cl /MD driver.c CLW3209DA_nag.lib
与cl /MD driver.c CLW3209DA_mkl.lib
已经在 Visual Studio 2005 (VC++ 8*), Visual Studio 2008 (VC++ 9**) 及 Visual Studio 2010 (VC++ 10***) 环境中测试过。
- Intel C++
icl /MD /I"install dir\include" driver.c "install dir\lib\CLW3209DA_nag.lib"如果已经设定好 LIB 与 INCLUDE 环境变量,则可以采用:icl /MD driver.c CLW3209DA_nag.lib
也可以采用 CLW3209DA_mkl.lib 以使用 MKL 算法库。
- Borland C++
采用 CLDLL084ZL。
若您使用 Borland C++ 且想要调用 NAG C 算法库第 9 版,请与我们 联络。
Borland 使用的算法库文件 (CLDLL084Z_nag_bc.lib 与 CLDLL084Z_mkl_bc.lib) 也在安装目录下的 install dir\lib 目录中提供。
您可以编译您的程序炼接 NAG C 算法库 DLL 档:
bcc32 /I"install dir\include" driver.c "install dir\lib\CLDLL084Z_nag_bc.lib"
或者,您可以将 NAG 的 header file 与 NAG lib 的路径分别加入 Borland 的配置文件案 bcc32.cfg 中。若您想要了解更多的细节,请参阅编译器的说明。如果您已经修改了配置文件,您便可以简单地输入:
bcc32 driver.c CLDLL084Z_nag_bc.lib
替换 CLDLL084Z_mkl_bc.lib 以便使用 MKL 算法库。有些时候,当使用 MKL 的 DLL 时,浮点异常处理时可能会导致程序异常终止,如果您遇到这样的问题,建议您使用 NAG 的 DLL 取代。
使用 Borland C++ (bcc32) 5.8 (Borland Developer Studio 2006 / Borland C++ Builder 10.0) 测试。
- gcc
在 Windows 命令行中使用 gcc 编译:
gcc -mno-cygwin -I "install dir\include" driver.c "install dir\lib\CLW3209DA_nag.lib" -o driver.exe
在 Cygwin xterm window 中编译:gcc -mno-cygwin -I "install dir/include" driver.c "install dir/lib/CLW3209DA_nag.lib" -o driver.exe
或gcc -mno-cygwin -I install\ dir/include driver.c install\ dir/lib/CLW3209DA_nag.lib -o driver.exe-mno-cygwin 参数用来移除 cygwin1.dll 的相依性。因为 NAG C 算法库的 DLL 档与 MinGW 的 gcc 编译器皆使用相同的 Microsoft runtime libraries,程序的 I/O 错误问题将不会发生。
替换 CLW3209DA_mkl.lib 以便使用 MKL 算法库。
从其他环境中使用 DLL 算法库
NAG C DLL 算法库可以自 GUI 环境中调用使用。以下的链接说明提供示例说明 Microsoft Visual C++、Borland C++ Builder、Microsoft Visual Basic 6、Microsoft Visual Basic .NET 与 Borland Delphi、Microsoft Excel 以及如何自 C# 与 Java 程序中调用的示例。
- Microsoft Visual C++
- Microsoft Visual Basic 6
- Microsoft Visual Basic .NET
- Microsoft Visual Basic .NET 64-bit (使用 64 位算法库 CLW6I09DAL)
- Microsoft Excel
- Microsoft Excel 64-bit (使用 64 位算法库 CLW6I09DAL)
- C#
- Java
- Borland C++ Builder (使用第 8 版 DLLs)
- Borland Delphi 与 Code Gear (使用第 8 版 DLLs)
如果您正使用 Borland C++ Builder 或 Delphi 且想要调用 NAG C 算法库第 9 版,请您直接联系我们。
为了方便从 Visual Basic 语言中调用 NAG C 算法库 DLL 文件,我们为每个 C 的函数提供了 "skeleton" 文件,提供函数定义、结构、型态;常数、列举类型与子程序等声明。 我们提供两种版本,一个为 Visual Basic 6 / Visual Basic for Applications Code,另一个提供给 Visual Basic .NET。
为了能够方便在 Visual Badic 中调用 NAG C 算法库 DLLs 档,我们提供了相关的头文件,对每一个函数、型别、结构、常数、 列举型别与回调函数提供声明指令。我们提供了四种不同的头文件:
- 使用 Visual Basic 6 / Visual Basic for Applications 与 CLW3209DAL
- 使用 Visual Basic .NET 与 CLW3209DAL
- 使用 64 位 Visual Basic for Applications 7.0 (VBA7) 与 CLW6I09DAL
- 使用 64 位 Visual Basic .NET 与 CLW6I09DAL
使用 DLL 建议
当运行任何一个链接 NAG C 算法库的程序时,相对应的 DLL 文件必须要能够被参考到。.\bin 的子目录路径必须要加在 PATH 环境变量中。
若您有使用 MKL,则 .\MKL_ia32_10.2\bin 子目录路径也须被加在 PATH 环境变量中。应该被加在包含 NAG DLL 的路径 .\bin 之后。
算法库的安装脚本可能已经自动加入了这些设定,但在某些情况下也许需要手动更动。在大多数系统中您可以自控制面板 | 系统 | 进阶系统设定 中加入。
要在集成开发环境中 (例如:Microsoft Developer Studio) 的项目中加入算法库,环境中需要在 .\include 目录中找到 (.h) 的文件; 算法库档也必须要在 .\lib 目录中。您可以在 Developer Studio 中打开 工具 | 选项对话框中,选择项目(或项目和解决方案)| VC++目录部分, 输入正确的配置。在 DLL 使用情况,为了方便起见 CLW3209DA_mkl.lib 已经直接带入 MKL 了,所以没有必要再指定 MKL 目录位置 (.\MKL_ia32_10.2\lib) 了。
如果您的机器是堆多核的环境且使用 Intel MKL 数学库,我们建议您设定环境变量 OMP_NUM_THREADS,指定程序可以有多少处理器运行,例如:
set OMP_NUM_THREADS=2这将会让 Intel MKL BLAS 函数使用多一个的处理器,进而加快 NAG 算法库中函数的计算时间。在大部分的系统中,环境变量的设定在 控制面板 | 系统 | 进阶系统设定 中。
我们会建议您使用 NAG_ALLOC 配置内存,以及使用 NAG_FREE 释放已配置的内存。在混合编程的环境中,这样的预处理机制并不支持,您必须直接使用 x04bjc 与 x04bdc 函数配置与释放内存。
x04bjc 函数配置内存。
Pointer NAG_CALL x04bjc(size_t size);
x04bdc 函数释放内存。
void NAG_CALL x04bdc(Pointer *ptr);
在多数的 NAG 函数中,内存是由函数内部所声明分配的,并会传回至原始调用的函数。这些已经配置的内存也许保有许多对使用者有用的资讯。也因此释放这些分配到的内存便交由使用这自行决定。然而,DLL 内部所分配到的内存将无法释放至程序外部使用。
x04bdc 的使用示例,请参考 g05eac 的示例程序。
NAG C 算法库的 CLW3209DAL DLL 文件使用 __stdcall 当作调用子程序的惯例 (calling convention)。
更多关于 NAG DLL 的 介绍。
* Microsoft C/C++ Compiler Version 14.00 ** Microsoft C/C++ Compiler Version 15.00 *** Microsoft C/C++ Compiler Version 16.00