A.1.1开始使用Oct文件

Oct文件是用Octave API编译成动态可加载对象的C++代码。它们的名称取自包含扩展名为的对象的文件十月.

找到一个C++编译器,使用正确的开关,为头文件添加正确的includepath等是一项艰巨的任务。Octave通过提供mkoct文件用于构建oct文件的命令。该命令可在Octave中或shell命令行中使用。

 
: mkoctfile [-options] file …
: [output, status] = mkoctfile (…)

这个mkoct文件函数编译用C、C++或Fortran编写的源代码。取决于与一起使用的参数mkoct文件,编译后的代码可以在Octave中调用,也可以用作独立的应用程序。

mkoct文件可以从shell提示或Octaveprompt中调用。从Octave提示符调用它只是将调用委托给shell提示符。任何输出都存储在输出中的变量和退出状态status变量如果在没有输出的情况下调用,并且编译失败,则Octave将发出错误。如果程序错误输出status然而,Octave只会报警告,程序员有责任验证命令是否成功。

mkoct文件接受以下参数,除要编译的代码的文件名外,所有参数都是可选的:

-I目录

添加include目录DIR以编译命令。

-D定义

将定义DEF添加到编译器调用中。

-l LIB

将库LIB添加到链接命令中。

-L目录

将库目录DIR添加到链接命令中。

M
依赖

为C和C++源文件生成依赖文件(.d)。

-R目录

将运行时路径添加到链接命令。

-Wl,…

将参数传递到链接器,如“-Wl,-rpath=…”。从于逗号被解释为命令分隔符,因此需要引号。

W

将参数传递给汇编程序,如“-Wa,OPTION”。

c

编译但不链接。

-g

为编译器启用调试参数。

-o文件
--输出FILE

输出文件名。默认扩展名为十月.mex如果--mex),除非链接独立的可执行文件。

-p VAR
--打印VAR

打印配置变量VAR。变量有三类:

用户可以用环境变量覆盖的Octave配置变量。这些用于以下命令mkoct文件执行。

ALL_CFLAGS包括ALL_CXXFLAGS LAPACK_LIBS ALL_FFLAGS LDFLAGS ALL_LDFLAGS LD_STATIC_FLAG blast_LIBS LFLAGS CC LIBDIR CFLAGS LIBOCTAVE cpic flags libocinterp cpflags OCTAVE_LINK_OPTS CXX octcincluded r CXXFLAGS OCTAVE-LINK_DEPS cxxpic flags OCTLIBDIR DL_ldflag OCT_LINK_DEPS F77 OCT_LINK_OPTS F77_INTEGER8_FLAG RDYNAMIC_FLAG FFLAGS SPECIAL_MATH_LIB fpic flags extra_CFLAGS INCFLAGS extra _cxxflag

Octave配置变量如上所述,但当前未使用mkoct文件.

AR dependent_EXTRA_SED_PATTERN dependent_FLAGS FFTW3F_LDFLAGS fftw3ff_LIBS FFTW3_ld FLAGS FFTW3_LIBS FFTW_LIBS FLIBS LIBS RANLIB READLINE_LIBS

仅为信息化目的提供的Octave配置变量。除了Octave主机OCTAVE_EXEC_HOME,用户不能覆盖这些变量。

如果Octave主机OCTAVE_EXEC_HOME在环境中设置,然后使用相应地调整其他变量Octave主机OCTAVE_EXEC_HOME替换为指定的目录的原始值前缀--exec前缀配置Octave时使用的参数。

API_VERSION LOCALFNFILEDIR ARCHLIBDIR LOCALOCTFILEDIR BINDIR LOCALSTARTUPPILEDIR CANONICAL_HOST_TYPE LOCALVERARCHLIBILEDIR DATADIR LOCALVERFCNFILEDIR DATAROOTDIR LOCALFEROCTFILEDir DEFAULT_PAGER MAN1DIR EXEC_PREFIX MAN1EXT EXEXT MANDIR FCNFILEDIR OCTAVE_EXEC_HOME IMAGEDIR OCTAVE_HOME INFODIR OCTAVE_VERSION INFILE OCTDATADIR OCTDOCTDOCtDOCTDOCTSDIR LOCALPICHLIBILEDir OCTFILEDIR LOCALPICTFILEDIR
--链接独立

链接一个独立的可执行文件。

--mex

假设创建了一个MEX文件。将默认输出扩展名设置为.mex.

s

剥离输出文件。

v
冗长的

执行命令时回显命令。

文件

要编译或链接的文件。可识别的文件类型包括:

.c c源.cc c++源.cp c++源.cpp c++源。CPP C++源。cxx C++源。C++C++源。C C++源代码。f Fortran源代码(固定格式)。F Fortran源(固定形式)。f90 Fortran源(自从形式)。F90 Fortran源代码(自从格式).o对象文件.a库文件

考虑下面的简短示例,它介绍了编写可链接到Octave的C++函数的基本知识。

#include<octave/oct.h>DEFUN_DLD(helloworld,args,nar痛风,“Hello World帮助字符串”){octave_stdout<<“Hello世界有”<args.length()<<“输入参数和”<nar痛风<“输出参数。\n”;//为任何输出返回空矩阵octave_value_list retval(nar痛风);为(int i=0;i<nar痛风;i++)retval(i)=octave-value(Matrix());Return retval;}

第一条关键线是#包括<Octave/oct.h>这使得C++oct文件所需的大部分定义可用。请注意Octave/10月h是C++标头,不能直接包括在C源文件或任何其他语言中。

包含者10月是宏的定义defon_DLD其创建动态加载的函数。此宏包含四个参数:

  1. 函数名称将在Octave中看到,
  2. 类型的函数的参数列表Octave值列表,
  3. 输出参数的数量,如果不使用,可以省略,而且经常省略,以及
  4. 用于函数的帮助文本的字符串。

用定义的函数的返回类型defon_DLD总是Octave值列表.

在选择函数名称时有几个重要的考虑因素。首先,它必须是一个有效的Octave函数名,因此必须是一系列字母、数字和下划线,而不是以数字开头。其次,当Octave使用函数名来定义它试图在中查找函数的文件名时defon_DLD宏必须与oct文件的文件名匹配。因此,上述函数应该在一个文件中helloworld.c,并将使用命令编译为oct文件

mkoctfile helloworld.cc

这将创建一个名为你好世界.oct这就是对函数的批判。需要注意的是,拥有多个是完全可以接受的defon_DLD函数。但是,对于源代码中定义的每个函数,必须有一个指向oct文件的符号链接defon_DLD宏或自动加载(函数文件)应该使用函数。

该函数的其余部分显示了如何查找输入参数的数量,如何通过Octave分页器进行打印,以及如何从该函数返回。如上所述编译此函数后,其使用示例如下

helloworld(1,2,3)-|Hello World有3个输入参数和0个输出参数。

接下来的部分将展示如何使用Octave核心内部的特定类。基类如d矩阵(双值矩阵)在目录中找到libOctave/数组。关于如何使用特定类的决定性参考是头文件本身。然而,为了能够使用aclass,通常只需学习手册中的示例就足够了。


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号