set command

set command set 命令 作用主要是显示系统中已经存在的shell变量 (是变量, 不是环境变量),以及设置shell变量的新变量值。使用 set 更改 shell 特性时,符号"+“和”-“的作用分别是打开和关闭指定的模式。set 命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare 命令以变量名=值 的格式进行定义即可。 使用declare命令定义一个新的环境变量"mylove”,并且将其值设置为"Visual C++",输入如下命令: #定义新环境变量, 注意: 值必须带引号 declare foo='bar' 再使用set命令将新定义的变量输出为环境变量,输入如下命令: #设置为环境变量 set -a foo 执行该命令后,将会新添加对应的环境变量。用户可以使用env命令和grep命令分别显示和搜索环境变量"mylove",输入命令如下: #显示环境变量值 env | grep foo 此时,该命令执行后,将输出查询到的环境变量值。 选项 -a:标示已修改的变量,以供输出至环境变量。 -b:使被中止的后台程序立刻回报执行状态。 -C:转向所产生的文件无法覆盖已存在的文件。 -d:Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 -e:若指令传回值不等于0,则立即退出shell。 -f:取消使用通配符。 -h:自动记录函数的所在位置。 -H Shell:可利用"!"加<指令编号>的方式来执行history中记录的指令。 -k:指令所给的参数都会被视为此指令的环境变量。 -l:记录for循环的变量名称。 -m:使用监视模式。 -n:只读取指令,而不实际执行。 -p:启动优先顺序模式。 -P:启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。 -t:执行完随后的指令,即退出shell。 -u:当执行时使用到未定义过的变量,则显示错误信息。 -v:显示shell所读取的输入值。 -x:执行指令后,会先显示该指令及所下的参数。 -e 若指令传回值不等于 0,则立即退出 shell。 ...

2012-05-10 · 1 min · 193 words · -

so, dll, 动态链接库

so, dll, 动态链接库 不同操作系统的动态链接库文件格式稍有不同,Linux称之为共享目标文件 (Shared Object),文件后缀为.so,Windows的动态链接库 (Dynamic Link Library)文件后缀为.dll。 https://zhuanlan.zhihu.com/p/235551437 ‘windows dll, Linux so’ http://blog.csdn.net/yang_lang/article/details/5926486 摘要: 动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。 但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。 引言 动态库 (Dynamic Link Library abbr,DLL) 技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。 采用动态库技术对于升级软件版本更加容易。与静态库 (Static Link Library) 不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。 在 Windows和Linux操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽相同。本文首先分析了在这两种操作系统中通 常采用的动态库调用方法以及程序编制方式,然后分析比较了这两种方式的不同之处,最后根据实际移植程序经验,介绍了将VC++编制的Windows动态库 移植到Linux下的方法。 动态库技术 2.1 Windows动态库技术 动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库只包含 资源,如Windows字体资源文件,称之为资源动态链接库。通常动态库以.dll,.drv、.fon等作为后缀。 相应的windows静态库通常以.lib结尾,Windows自己就将一些主要的系统功能以动态库模块的形式实现。 Windows动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调用进程的一部分。DLL也只能被该进程的线程所访问。DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。 DLL 模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中 只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编程语言及编译器无关,可以通过DLL来实现混合语言编程。DLL函数中的代码所创建的任何 对象 (包括变量) 都归调用它的线程或进程所有。 根据调用方式的不同,对动态库的调用可分为静态调用方式和动态调用方式。 (1) 静态调用,也称为隐式调用,由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码 (Windows系统负责对DLL调用次数的计数) ,调用方式 简单,能够满足通常的要求。通常采用的调用方式是把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的函数时,只须在源文件中 声明一下。 LIB文件包含了每一个DLL导出函数的符号名和可选择的标识号以及DLL文件名,不含有实际的代码。Lib文件包含的信息进入到生成的应用程序中,被调用的DLL文件会在应用程序加载时同时加载在到内存中。 (2)动态调用,即显式调用方式,是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,比较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。在Windows系统中,与动态库调用有关的函数包括: ①LoadLibrary (或MFC 的AfxLoadLibrary) ,装载动态库。 ②GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。 ③FreeLibrary (或MFC的AfxFreeLibrary) ,释放动态链接库。 在 windows中创建动态库也非常方便和简单。在Visual C++中,可以创建不用MFC而直接用C语言写的DLL程序,也可以创建基于MFC类库的DLL程序。每一个DLL必须有一个入口点,在VC++ 中,DllMain是一个缺省的入口函数。DllMain负责初始化(Initialization)和结束(Termination)工作。 ...

2012-03-27 · 2 min · 243 words · -

undefined reference to ...

undefined reference to … https://zhuanlan.zhihu.com/p/81681440 /usr/bin/ld: cannot find -lxxx 的解决办法 在软件编译过程中,经常会碰到类似这样的编译错误: /usr/bin/ld: cannot find -lhdf5 这表示找不到库文件 libhdf5.so,若是其它库文件,则是 cannot find -lxxx 了,其中 xxx 是库文件的名字。 将库文件所在路径添加到gcc的搜索路径 使用以下命令查询gcc能否搜寻到指定的库文件: gcc -lgsasl –verbose 查询库文件 libhdf5.so 是否能在搜索路径中找到。 使用 /etc/ld.so.conf 配置文件 将库文件所在的路径加入到 /etc/ld.so.conf 尾部,并使之生效: $ sudo echo ‘/opt/biosoft/hdf5-1.8.15-patch1/lib/’ » /etc/ld.so.conf libhdf5.so 在路径 /opt/biosoft/hdf5-1.8.15-patch1/lib/ 下,将该路径加添加到配置文件中 $ sudo ldconfig 运行该命令,重新载入 /ext/ld.so.conf 中的路径,使修改生效。 ls -l /lib/x86_64-linux-gnu cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf ls -l /lib/x86_64-linux-gnu

2012-03-22 · 1 min · 63 words · -