Oct文件是用Octave API编译成动态可加载对象的C++代码。它们的名称取自包含扩展名为的对象的文件十月.
找到一个C++编译器,使用正确的开关,为头文件添加正确的includepath等是一项艰巨的任务。Octave通过提供mkoct文件
用于构建oct文件的命令。该命令可在Octave中或shell命令行中使用。
[-options] file …
¶[output, status] =
mkoctfile (…)
¶这个mkoct文件
函数编译用C、C++或Fortran编写的源代码。取决于与一起使用的参数mkoct文件
,编译后的代码可以在Octave中调用,也可以用作独立的应用程序。
mkoct文件
可以从shell提示或Octaveprompt中调用。从Octave提示符调用它只是将调用委托给shell提示符。任何输出都存储在输出中的变量和退出状态status变量如果在没有输出的情况下调用,并且编译失败,则Octave将发出错误。如果程序错误输出或status然而,Octave只会报警告,程序员有责任验证命令是否成功。
mkoct文件
接受以下参数,除要编译的代码的文件名外,所有参数都是可选的:
添加include目录DIR以编译命令。
将定义DEF添加到编译器调用中。
将库LIB添加到链接命令中。
将库目录DIR添加到链接命令中。
为C和C++源文件生成依赖文件(.d)。
将运行时路径添加到链接命令。
将参数传递到链接器,如“-Wl,-rpath=…”。从于逗号被解释为命令分隔符,因此需要引号。
将参数传递给汇编程序,如“-Wa,OPTION”。
编译但不链接。
为编译器启用调试参数。
输出文件名。默认扩展名为十月或.mex如果--mex),除非链接独立的可执行文件。
打印配置变量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.
剥离输出文件。
执行命令时回显命令。
要编译或链接的文件。可识别的文件类型包括:
.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
其创建动态加载的函数。此宏包含四个参数:
Octave值列表
,用定义的函数的返回类型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号