如何使用 NAG C Windows DLL 算法库

如何使用 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.libCLDLL084Z_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 程序中调用的示例。

如果您正使用 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 档,我们提供了相关的头文件,对每一个函数、型别、结构、常数、 列举型别与回调函数提供声明指令。我们提供了四种不同的头文件:

使用 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 释放已配置的内存。在混合编程的环境中,这样的预处理机制并不支持,您必须直接使用 x04bjcx04bdc 函数配置与释放内存。

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