动态链接库及静态链接库(windows下的.dll.lib和linux下的.so.a)

动态链接库及静态链接库(windows下的.dll.lib和linux下的.so.a)
动态链接库及静态链接库(windows下的.dll.lib和linux下的.so.a)

ln -S libhello.so.1.0 libhello.so.1

ln -S libhello.so.1 libhello.so

使用库

当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,

由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记,指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linUX下进行连接的缺省操作是首先连接动态库,也就

是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。

现在假设有一个叫hello的程序开发包,它提供一个静态库libhello.a 一个动态库libhello.so,一个头文件hello.h,头文件中提供Sayhello()这个函数

/* hello.h */

void Sayhello();

另外还有一些说明文档。这一个典型的程序开发包结构

1. 与动态库连接]

linux默认的就是与动态库连接,下面这段程序testlib.c使用hello库中的Sayhello()函数

/*testlib.c*/

#i nclude

#i nclude

int mai n()

{

Sayhello();

return 0;

}

使用如下命令进行编译

$gcc -C testlib.c -o testlib.o

用如下命令连接:

$gcc testlib.o -lhello -o testlib

在连接时要注意,假设libhello.o和libhello.a都在缺省的库搜索路径下/usr/lib下,如果在

3.动态库的路径问题

为了让执行程序顺利找到动态库,有三种方法:

(1) 把库拷贝到∕usr∕lib和/Iib目录下。

⑵在 LD_LIBRARY_PATH 环境变量中加上库所在路径。例如动态库IibheIlo.so 在

∕home∕ting/lib目录下,以 bash为例,使用命令:|

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ti ng/lib

(3)修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。这样,

加入的目录下的所有库文件都可见、

4.查看库中的符号

有时候可能需要查看一个库中到底有哪些函数,nm命令可以打印出库中的涉及到的所有

符号。库既可以是静态的也可以是动态的。nm列出的符号有很多,常见的有三种,一种

是在库中被调用,但并没有在库中定义(表明需要其他库支持),用U表示;一种是库中定义的函数,用T表示,这是最常见的;另外一种是所谓的弱态”符号,它们虽然在库中被定义,但是可能被其他库中的同名符号覆盖,用W表示。例如,假设开发者希望知道上央提

到的hello库中是否定义了 Printf():

$nm libhello.so |grep Printf

/* hello.c */

#i nclude

void Sayhello()

{

Prin tf("hello,world?n");

}

用gcc编绎该文件,在编绎时可以使用任何全法的编绎参数,例如-g加入调试代码等:

gcc -C hello.c -o hello.o

1. 连接成静态库

连接成静态库使用ar命令,其实ar是archive的意思

$ar CqS libhello.a hello.o

2. 连接成动态库

生成动态库用gcc来完成,由于可能存在多个版本,因此通常指定版本号:

$gcc -Shared -Wl,-s On ame,libhello.so.1 -o libhello.so.1.0 hello.o

另外再建立两个符号连接:

$ln -S libhello.so.1.0 libhello.so.1

$ln -S libhello.so.1 libhello.so

-Wl表示后面的参数也就是-Soname,libhello.so.1 直接传给连接器ld进行处理。实际上,每

-Wl表示后面的参数也就是-Soname,libhello.so.1 直接传给连接器ld进行处理。实际上,每

便会将Soname 嵌入连结中的二进制文件内,

而不是它正在运行的实际文件名, 在程序执行

期间,程序会查找拥有 Soname 名字的文件,而不是库的文件名,换句话说, Soname 是库

的区分标志。

这样做的目的主要是允许系统中多个版本的库文件共存, 习惯上在命名库文件的时候通常与

摘要:动态链接库技术实现和设计程序常用的技术,在 WindowS 和LinUX 系统中都有动态 库的概念,采用动态库可以有效的减少程序大小, 节省空间,提高效率,增加程序的可扩展

性,便于模块化管理。但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用

时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将 ViSUaI C++编

制的动态库移植到 LinUX 上的方法和经验。

动态库(Dynamic Link Library abbr , DLL)技术是程序设计中经常采用的技术。其目 的减少程序的大小,

节省空间,提高效率,具有很高的灵活性。采用动态库技术对于升级软

件版本更加容易。与静态库(StatiC Link Library )不同,动态库里面的函数不是执行程序本 身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。

在Windows 和LinUX 操作系统中,都可采用这种方式进行软件设计,但他们的调用方 式以及程序编制方式不尽相同。本文首先分析了在这两种操作系统中通常采用的动态库调用 方法以及程序编制方式,然后分析比较了这两种方式的不同之处,

最后根据实际移植程序经

验,介绍了将 VC++编制的Windows 动态库移植到LinUX 下的方法。

2、动态库技术

2.1 Windows 动态库技术

动态链接库是实现 Windows 应用程序共享资源、节省内存空间、提高使用效率的一个 重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如 Windows 字体资源文件,称之为资源动态链接库。通常动态库以 .dll ,.drv 、.fon 等作为后

缀。相应的 Windows 静态库通常以」ib 结尾,Windows 自己就将一些主要的系统功能以动

态库模块

的形式实现。

Win dows 动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地 址空间分配的内存,成为调用进程的一部分。

DLL 也只能被该进程的线程所访问。 DLL 的句

柄可以被调用进程使用;调用进程的句柄可以被 DLL使用。DLL模块中包含各种导出函数,

用于向外界提供服务。 DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中只有一个实例;DLL实现了代码封装性;DLL的编

制与具体的编程语言及编译器无关,可以通过DLL来实现混合语言编程。DLL函数中的代

码所创建的任何对象(包括变量)都归调用它的线程或进程所有。

根据调用方式的不同,对动态库的调用可分为静态调用方式和动态调用方式。

(1) 静态调用,也称为隐式调用,由编译系统完成对DLL的加载和应用程序结束时DLL 卸载的编码(Windows系统负责对DLL调用次数的计数),调用方式简单,能够满足通常的一要求。通常采用的调用方式是把产生动态连接库时产生的丄IB文件加入到应用程序的工程中,想使用DLL中的函数时,只须在源文件中声明一下。LIB文件包含了每一个 DLL导出函数

的符号名和可选择的标识号以及DLL文件名,不含有实际的代码。Lib文件包含的信息进入

到生成的应用程序中,被调用的DLL文件会在应用程序加载时同时加载在到内存中。

(2) 动态调用,即显式调用方式,是由编程者用 API函数加载和卸载 DLL来达到调用DLL 的目的,比较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。在

Windows系统中,与动态库调用有关的函数包括:

在Windows中创建动态库也非常方便和简单。在ViSUaI C++中,可以创建不用 MFC而

直接用C语言写的DLL程序,也可以创建基于 MFC类库的DLL程序。每一个DLL必须有一个入口点,在VC++中,DIIMain是一个缺省的入口函数。DllMain负责初始化(InitializatiOn)和结束(Termination)工作。动态库输出函数也有两种约定,分别是基于调用约定和名字修饰

约定。DLL程序定义的函数分为内部函数和导出函数,动态库导出的函数供其它程序模块调

用。通常可以有下面几种方法导出函数:

①采用模块定义文件的EXPoRT部分指定要输入的函数或者变量。

②使用MFC提供的修饰符号_declspec(dllexport)。

③以命令行方式,采用/EXPORT命令行输出有关函数。

在Windows动态库中,有时需要编写模块定义文件(.DEF),它是用于描述 DLL属性的

模块语句组成的文本文件。

2.2 LinUX共享对象技术

在LinUX操作系统中,采用了很多共享对象技术( Shared ObjeCt ),虽然它和 Windows 里的动态库相对应,但它并不称为动态库。相应的共享对象文件以.so作为后缀,为了方便,在本文中,对该概念不进行专门区分。LinUX系统的/Iib以及标准图形界面的∕usr∕X11R6∕lib 等目录里面,就有许多以so结尾的共享对象。同样,在LinUX下,也有静态函数库这种调

用方式,相应的后缀以.a结束。LinUX采用该共享对象技术以方便程序间共享,节省程序占有空间,

was7在Windows下的安装

Window下WebSphere Application Server 7的安装 目录 安装WebSphere Application Server 7 (1) 键入章标题(第2 级) (2) 键入章标题(第3 级) (3) 键入章标题(第 1 级) (4) 键入章标题(第2 级) (5) 键入章标题(第3 级) (6) 一、安装WebSphere Application Server 7 1、单击WebSphere Application Server的安装程序launchpad.exe, 弹出安装欢迎窗口,单击启动WebSphere Application Server-Trial安装向导进行安装如下图: 2、弹出初始化向导窗口,等待初始化完成,如下图

3、弹出安装向导说明,单击下一步,如图 4、弹出软件许可证协议窗口,选择我接受许可证协议的的全部条款,单击下一步,如下图

5、弹出系统必备软件检查窗口,单击下一步 6、弹出选择可选的功能部件,保持默认, 单击下一步,如下图

7、弹出设置安装目录窗口、系统默认安装路径如下图,要改变安装路径,单击【浏览…】,改变安装目录。设置完毕,单击下一步 8、弹出选择要创建的WebSphere应用服务器的环境类型,这里选择“无“,单击下一步如下图

此时会弹出一个警告询问窗体,单击是如图: 9、弹出搜索临时修订窗口,等待完成,单击下一步如图

10、弹出安装摘要窗口,单击下一步如图 11、弹出安装窗口,安装过程可能需要等待一段时间 12、安装完成,弹出安装结果窗口,选中“使用概要管理工具创建新的WebSphere ApplictionServer 概要文件”或开始->IBM_WebSphere->Application Server 7.0->概要管理工具,来启动概要管理工具,创建应用程序服务器单击完成。

Cacti内部安装手册

1.IIS –安装IIS服务器。 2.SNMP –安装SNMP服务,正确配置并启动服务。 3.Cacti –提取 cacti-0.8.6h.zip 中的文件到默认网站的路径下,一般为 C:\Inetpub\wwwroot\cacti 4.Cactid –提取cacti-cactid-0.8.6h-cygwin.1. 5.20.zip中的文件到 Cacti路径下。确认cactid.conf.dist文件包含在此文件夹内。 5.RRDTool –提取rrdtool-1.2.15-cygwin-1.5.20.zip中的文件到 C:\rrdtool目录下。 6.PHP - 提取 php-5.1.4-Win32.zip 中的文件到c:\php文件夹. 7.MySQL - 提取mysql-4.1.21-win32.zip 中的文件,安装到默认路径下 C:\Program Files\MySQL\MySQL Server 4.1 。初始root密码设定为:123456。 系统环境:windows 2003+IIS6.0 安装包: php-5.1.4-Win32.zip mysql-4.1.21-win32.zip ActivePerl-5.8.8.819-MSWin32-x86-267479.msi rrdtool-1.2.15-cygwin-1.5.20.zip net-snmp-5.3.1-1.win32.exe cacti-cactid-0.8.6h-cygwin.1.5.20.zip cacti-0.8.6h.zip for win32

配置 PHP 1.添加以下路径c:\php 到已经存在的Windows系统PATH环境变量中. 打开控制面板: 系统 | 高级 | 环境变量 | 系统变量. 2.添加一个新的Windows系统环境变量,名为PHPRC路径为:c:\php. 3.添加一个新的Windows系统环境变量,名为MIBDIRS , 路径为 c:\php\extras\mibs 4.重命名c:\php\php.ini.dist为php.ini, 然后做以下修改: 添加以下几行或取消注释 extension_dir = “c:\php\ext” extension=php_mysql.dll extension=php_snmp.dll extension=php_sockets.dll cgi.force_redirect = 0 5.如果你想导入模版, 取消下面这行的注释: file_uploads = On 6.将来要运行“任务计划”的用户需要被赋予本地MIBDIRS环境变量 下.index文件的修改权限. 配置 Web 服务器 (IIS) 1.运行 Internet Information Services (IIS) 管理器, 右键点击默认网 站选择属性. 2.在主目录标签下,选择配置并点击添加. 浏览选择可执行文件 php4isapi.dll或者php5isapi.dll, 在扩展名中输入 .php 备注: 如果使用 IIS6, 需要允许全部动作和脚本引擎.

GCC编译动态和静态链接库

我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。 在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。 第1步:编辑得到举例的程序--hello.h、hello.c和main.c; hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出"Hello XXX!"。hello.h(见程序1)为该函数库的头文件。main.c(见程序3)为测试库文件的主程序,在主程序中调用了公用函数hello。 1.#ifndef HELLO_H 2.#define HELLO_H 3. 4.void hello(const char *name); 5. 6.#endif //HELLO_H 复制代码 程序1: hello.h 1.#include 2. 3.void hello(const char *name) 4.{ 5.printf("Hello %s!\n", name); 6.} 复制代码 程序2: hello.c 1.#include "hello.h" 2. 3.int main() 4.{ 5.hello("everyone"); 6.return 0; 7.} 复制代码 程序3: main.c

第2步:将hello.c编译成.o文件; 无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序hello.c通过g cc先编译成.o文件。 在系统提示符下键入以下命令得到hello.o文件。 # gcc -c hello.c # 我们运行ls命令看看是否生存了hello.o文件。 # ls hello.c hello.h hello.o main.c # 在ls命令结果中,我们看到了hello.o文件,本步操作完成。 下面我们先来看看如何创建静态库,以及使用它。 第3步:由.o文件创建静态库; 静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为myhello,则静态库文件名就是libmyhello.a。在创建和使用静态库时,需要注意这点。创建静态库用ar命令。 在系统提示符下键入以下命令将创建静态库文件libmyhello.a。 # ar crv libmyhello.a hello.o # 我们同样运行ls命令查看结果: # ls hello.c hello.h hello.o libmyhello.a main.c # ls命令结果中有libmyhello.a。 第4步:在程序中使用静态库; 静态库制作完了,如何使用它内部的函数呢?只需要在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成目标文件时指明静态库名,gcc将会从静态库中将公用函数连接到目标文件中。注意,gcc会在静态库名前加上前缀lib,然后追加

Compiere在Windows环境下的安装步骤

Compiere资料参考网址 https://www.360docs.net/doc/583800943.html, https://www.360docs.net/doc/583800943.html,的compiere论坛 Compiere所需软件下载网址: https://www.360docs.net/doc/583800943.html,/download/dl_software.htm Compiere安装步骤(Windows环境下) 一.前期准备工作 1.安装Oracle数据库 注意事项:1)Compiere 2.6.3 正式支持的数据库包括Oracle 10g 与Oracle XE 数据库(后者完全免费),但尚未正式支持 PostgreSQL、EnterpriseDB、DB2、SQL Server 等数据库。 2) Oracle XE数据库的安装过程 Oracle 10g数据库的安装过程 3) 测试数据库安装是否成功 2. 安装Java SDK 1.5 Compiere 服务器端需要安装J ava SDK 1.5.0_04 及更高版本。下载后直接安装即可。 重要:安装完成后,必须新建并设置JAVA_HOME 环境变量为上述Java SDK 1.5 的安装路径。在Windows 平台类似下图:

技巧:如果您不熟悉如何设置环境变量,请遵循下述步骤: 1.运行控制面板中的“系统”,打开“系统属性”对话框。 2.切换至“高级”页签,点击“环境变量”按钮。 3.在弹出的“环境变量”对话框中,点击“系统变量”下的“新建”按钮。 4.在弹出的“新建系统变量”对话框中,输入变量名称与变量值后,按确定按钮,然后再次按确定按钮。安装Java 1.5 JRE(运行库) Compiere 客户端需要安装J ava JRE 1.5.0_04 及更高版本。下载后直接安装即可。 二.配置Compiere 服务器 到https://www.360docs.net/doc/583800943.html,/download/dl_software.htm 下载 compiere服务器软件无论您使用Oracle XE 还是 Oracle 10g 数据库,下面的执行步骤均相同(特别注明之处除外)。

FORTRAN静态库动态库的生成

FORTRAN静态库、动态库的生成、维护与调用 闫昊明2006-9-10 一、FORTRAN静态库的生成与维护 FORTRAN 静态库是经过编译的代码块,它与主程序相对独立,可以被主程序调用,是FORTRAN工程类型之一. 静态库包含一系列子程序,但不包括主程序. 静态库一般具有LIB扩展名并包含目标代码,且静态库存放在它们特定的目录中. FORTRAN静态库在组织大型程序和在不同程序之间共享子程序等方面具有较大的优点,其重要性不言而喻. 当将静态库与主程序联系起来时,在主程序中调用静态库中的任何子程序将编译到相应的可执行程序. 应用静态库的时候,只有所需要的子程序才在编译过程中插入到可执行文件(.EXE),这意味着这种可执行文件将比包含所有的子程序所生成的可执行文件小. 而且,不必担心哪些子程序是需要的,哪些是不需要的,编译器将替你做出选择. 同时,当更改静态库中的子程序时,相应的应用程序可以不做任何改变,而只需要对其进行重新的编译链接,即可获得新的结果,这无疑也是方便的. 目前,常用的FORTRAN静态库有很多种,WINDOWS操作系统下的Compaq Visual FORTRAN version 6.5(简称CVF65)自带的数学统计库IMSL就是一个非常全面的静态库,可以用来解决线性代数和统计学上的很多经典问题. 此外,在NCAR互联网站有很多有用的FORTRAN子程序(网址:https://www.360docs.net/doc/583800943.html,/softlib/mathlib.html),其中包括地球物理科学问题、离散和快速Fourier变换、可分离的椭圆微分方程、插值、Legendre多项式、普通数学问题、本征值问题求解、线性方程求解、非线性方程求解、常微分方程求解、特殊函数、统计学等常用子程序集等. 这些FORTRAN子程序可以解决很多基础性的问题,因此有很高的利用价值. 在WINDOWS操作系统下,可以用两个命令分别生成静态库. 一个是用‘nmake’命令,它一般用来编译原来应用在UNIX环境下的FORTRAN子程序集,在编译过程中要读取makefile文件中的编译命令,类似于在UNIX下安装软件. 另一个是用‘lib’命令,它可以在WINDOWS环境下编译任何需要集成为静态库的子程序集. 编译静态库在DOS命令行环境下比较方便,以后的命令行都指在此环境下运行. 在编译静态库前,首先要安装CVF65,其次要完成要编译的FORTRAN子程序(*.f90). 对于FORTRAN子程序,最好用FORTRAN90的标准来完成,应该放弃FORTRAN77标准。FORTRAN90是FORTRAN语言从结构化走向面向对象化的重要一步,使FORTRAN语言更加接近C++。在FORTRAN90标准中,对数组的操作既增强了功能又简化了使用,此外自由格式、MODULE、动态数组、指针等的应用大大丰富了FORTRAN语言,使得编程更加轻松。目前,FORTRAN95和FORTRAN2000标准也在应用,它们与FORTRAN90标准比较类似,主要的改进在并行运算方面,因此目前在单机上应用的主要还是FORTRAN90. 在DOS命令行环境下,进入到FORTRAN子程序所在的子目录,然后按下面两个步骤生成FORTRAN静态库. (1)键入“df *.f90 /c”,回车,可以看到CVF65编译器对所有的FORTRAN子程序(*.f90)进行编译,生成*.obj文件(注意,编译时,/c中的“c”必须小写). (2)键入“lib *.obj /out:libname.lib”,回车,可以看到链接生成libname.lib静态库. 需要注意的是,每次加入新的子程序或对静态库中的子程序修改以后,都要按上述两个步骤重新进行编译链接. 生成静态库以后,可用“dumpbin /linkermember libname.lib”来查看静态库中可用的子程序名称. 也可执行“lib /list libname.lib”来查看静态库中的*.obj文件. 当然,也可以在CVF65集成环境下,生成静态库. 步骤如下:

silvaco在windows下安装教程

[原创]Silvaco在windows下的安装方法 ——提供给要学习silvaco软件的各位 首先声明:要安装此版本需要有windows版本的支持,因为linux版本无破解文件,所以我并没有像网上安装一样安装服务在linux版本下,我安装服务在windows,linux从windows 获得服务,从而开启linux下的silvaco。(本教程及软件是给那些想要学习silvaco软件的,请勿用于任何其他商业用途) 本教程从安装windows的silvaco开始到虚拟机一直教到大家将silvaco安装完成为止。。 首先告诉大家此教程是在windows xp下操作的,如果是vista用户,操作有些不同,我会慢慢提出来。 安装windows xp版本的silvaco ,这个网上都有: 1、安装TCAD 2007.04,如果作为LICENSE服务器,请选择安装SFLM server。然后在系统服务里停止: Standard Floating License Manager (SFLMSERVERD),如果有这个服务的话。 2、把rpc.sflmserverd.exe拷贝到下面的路径: sedatools\lib\rpc.sflmserverd\8.0.3.R\x86-nt 替换原来的文件。 3、在快捷方式中运行Start Server 确保下面的系统服务启动: Standard Floating License Manager (SFLMSERVERD) 会要你设密码,随便写一个就行。 4、通过IE http://127.0.0.1:3162进入SFLM设置,通过SFLM在线获取该电脑的SFLM_ID。可能得到的格式如下:0SSMID12345678,也可能是比这个复杂多的形式 5、修改Silvaco.lic中下面的一行,替换为4中你申请到的SFLM_ID。 LM_HOSTIDS XXX 6、拷贝修改后的Silvaco.lic到下面路径: C:\sedatools\etc\license 7、通过SFLM Access,正常选择安装Silvaco.lic。 8、检查license状态,所有license现在应该正常可用了。 9、设置局域网其他用户到该PC的ip地址获取license。 所有人应该正常可用。 (我需要提出的是:如果你是vista用户请注意,虽然xp版本的也能使用,不过要注意如何操作,在开启和关闭服务的时候如果不能关闭,也就是复制破解exe覆盖文件时不能覆盖,请注意请在关闭和开启服务时右击“以管理员身份运行”,这样就能正常使用了。)

编译生成动态库时,被关联的静态库会被编译到动态库里面

动态库调用静态库. 生成动态库: 需要的目标文件得用-fPIC选项生成. 而静态库所需的目标文件可以不用-fPIC选项. 一个应用程序调用动态库, 而这个动态库其中的函数调用某静态库时,如何生成应用程序呢? 例: /////// static.h void static_print(); ///////static.cpp #include #include "static.h" void static_print() { std::cout<<"This is static_print function"< #include "shared.h" #include "static.h" void shared_print() { std::cout<<"This is shared_print function"; static_print(); } ////////test.cpp #include "share.h" int main() { shared_print(); return 0; } 方法一: 静态库的.o文件也用-fPIC生成. 生成动态库时把静态库加入. 生成应用程序时只加载动态库 g++ -c -fPIC static.cpp // 生成static.o ar -r libstatic.a static.o // 生成静态库libstatic.a g++ -c -fPIC shared.cpp // 生成shared.o g++ -shared shared.o -lstatic -o libshared.so // 生成动态库libshared.so 注: -shared是g++的选项,与shared.o无关. -lstatic选项把libstatic.a的函数加入动态库中. g++ test.cpp -lshared -o test.exe // link libshared.so 到test.exe中. 方法二: 静态库的.o文件不用-fPIC生成. 生成动态库时不加静态库. 生成应用程序时加载动态库和静态库. g++ -c static.cpp // 生成static.o ar -r libstatic.a static.o // 生成静态库libstatic.a g++ -c -fPIC shared.cpp // 生成shared.o g++ -shared shared.o -o libshared.so // 生成动态库libshared.so 注: -shared是g++的选项,与shared.o无关. 这时如果加-lstatic. error:relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC

weblogic在windows下安装及部署项目教程

Weblogic在windows下安装及部署项目教程 1.Weblogic10.3.6版本下载地址: https://www.360docs.net/doc/583800943.html,/technetwork/cn/middleware/ias/downloads/wls-main-091116-zhs.html 或在\\192.168.60.244\Tool\测试环境工具上取 2.安装 1)安装目录:D:\Oracle\Middleware 2)选择安装类型为自定义,选择自己需要安装的组件,其他都是默认直接下一步,直 到安装完成。 3.创建域 1)创建新的weblogic域 2)其他默认,点“下一步”,到下图这个界面设置用户名和密码。例如:用户名:weblogic 密码:weblogic1

3)选择服务器启动模式和JDK 4)选择可选配置

5)配置管理服务器 6)后面步骤直接“下一步”,知道创建完成。创建完成,运行 D:\oracle\Middleware\user_projects\domains\easyStore_domain\bin\startWeblogic.c md,用浏览器打开http://192.168.60.244:7001/console可直接登录管理服务器。 4.配置受管服务器 1)登录界面,使用自己设置的用户名密码登录

2)新建受管服务器 3)设置服务器名称、服务器监听地址、服务器端口,名称和端口均不与其他服务器重 复。然后点击“下一步”,完成。

5.配置数据源 1)点击“新建”,选择“一般数据源” 2)设置JDBC数据源名称,以及数据库类型,点击“下一步” 3)设置数据库驱动程序,选择如下图所示 4)设置JDBC数据源详细信息,实际的数据库名称、数据库用户名、主机地址等。

C语言程序静态库和动态库的创建及其应用

C语言程序静态库和动态库的创建及其应用 在用c写程序时,很多时候需要存储一些简单的数据,如果为此而用mysql数据库就有些大才小用了,可以把这些数据以结构的形写入文件,然后再需要时读取文件,取出数据。 如下是定义函数的源文件和头文件: 源文件struct.c: #include "struct.h" //第一个参数是要写入的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,第四个参数是打开文件流的形态,返回TRUE表示写入成功,返回FALSE表示写入失败int writeStruct(const char *fileName,char *buffer,int bufferLen,char *mode){ int ret; FILE *fileID = NULL; fileID = fopen(fileName,mode); if (fileID == NULL){ perror("fopen"); goto writeEnd; } rewind(fileID); ret = fwrite(buffer,bufferLen,1,fileID); if (ret <= 0){ perror("fwrite"); goto writeEnd; } if (fileID != NULL){ fclose(fileID); fileID = NULL; } return TRUE;

writeEnd: if (fileID != NULL){ fclose(fileID); fileID = NULL; } return FALSE; } //第一个参数是要读取的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,第四个参数是打开文件流的形态,返回TRUE表示读取成功,返回FALSE表示读取失败int readStruct(const char *fileName,char *buffer,int bufferLen,char *mode){ int ret; FILE *fileID = NULL; fileID = fopen(fileName,mode); if (fileID == NULL){ perror("fopen"); goto readEnd; } rewind(fileID); memset(buffer,0,sizeof(buffer)); ret = fread(buffer,bufferLen,1,fileID); if (ret >= 0){ strcat(buffer,"\0"); }else{ perror("fread") ; goto readEnd; } if (fileID != NULL){ fclose(fileID); fileID = NULL; }

Windows 2003下CACTI的安装及配置

前期准备: 平台:Windows2003 需要安装的软件: Apache2.0.63 https://www.360docs.net/doc/583800943.html,/ PHP5.2.2 https://www.360docs.net/doc/583800943.html,/downloads.php MySQL5.1.50 https://www.360docs.net/doc/583800943.html,/downloads/mysql/ cacti-0.8.7g https://www.360docs.net/doc/583800943.html,/download_cacti.php cygwin 1.7.6-1https://www.360docs.net/doc/583800943.html,/需在线安装 rrdtool-1.2.15 https://www.360docs.net/doc/583800943.html,/downloads/ Spine(Cactid)0.8.7 https://www.360docs.net/doc/583800943.html,/downloads/ net-snmp-5.5 https://www.360docs.net/doc/583800943.html,/download.html 1,安装Apache 按提示默认安装即可。 注意:如果有80端口或是8080端口已经占用,请更改Apache安装文件目录conf文件夹的httpd.conf里,listen的端口为808X: # # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses (0.0.0.0) # #Listen 12.34.56.78:80 Listen 8083 我的80端口和8081端口已被占用,所以Apache的测试页为:http://localhost:8083

使用Automake生成Makefile及动态库和静态库的创建

使用Automake生成Makefile及动态库和静态库的创建使用Automake 创建和使用静态库 1. 目录结构如下: [c-sharp]view plaincopy 1.example 2.|——src 目录(存放源代码文件) 3. |——hello.c 4.|——lib 目录(存放用来生成库的文件) 5. |——test.c 用来生成静态库libhello.a 6.|——include 目录(存放程序中使用的头文件) 7. |——hello.h 2. 编写的各个目录下的源文件 [c-sharp]view plaincopy 1.hello.h 文件 2.extern void print(char *); 3.test.c 文件 4.#include 5.void print(char *msg) 6.{ 7.print(“%s/n”, msg); 8.} 9.hello.c 文件 10.#include “hello.h” 11.int main() 12.{ 13.print(“Hello static library!”);//这里用到的是静态库中的函数 14.return 0; 15.} 3. 编写lib/Makefile.am 文件

[c-sharp]view plaincopy 1.noinst_LIBRARIES=libhello.a 2.libhello_a_SOURCES=test.c 3.AUTOMAKE_OPTIONS=foreign 第一行noinst 表示生成的是静态库,不需要make install ,直接制定它的位置和名字就 可以使用。 第二行表示用来生成静态库的源文件。如果要把静态库生成到其他地方,可以在=后面 加上路径(建议用绝对路径,并将所要用到的静态库生成在同一个文件夹下,如lib)。 第三行AUTOMAKE_OPTIONS 是Automake 的选项。Automake 主要是帮助开发 GNU 软 件的人员来维护软件,所以在执行Automake 时,会检查目录下是否存在标准GNU 软件中 应具备的文件,例如 'NEWS'、'AUTHOR'、 'ChangeLog' 等文件。设置为foreign 时,Automake 会改用一般软件的标准来检查。如果不加这句的话,需要在autoconf之前,先执行touch NEWS README AUTHORS ChangeLog 来生成'NEWS'、'AUTHOR'、 'ChangeLog' 等文件4. 编写src/Makefile.am 文件 [c-sharp]view plaincopy 1.AUTOMAKE_OPTIONS=foreign 2.INCLUDES= -I../include 3.bin_PROGRAMS=hello 4.hello_SOURCES=hello.c 5.hello_LDADD=../lib/libhello.a 第二行指定头文件的位置,-I 是idirafter 的缩写。../include 指定头文件的位置,..是上 一级目录,也就是这里的example 目录。 第三行指定生成可执行文件名hello,在这里可执行文件生成在src 下,建议将可执行文 件生成到一个特定的文件夹下,让它和源代码分开,如/root/test 目录下。写法为: [c-sharp]view plaincopy 1.bin_PROGRAMS=/root/test/hello,后面的第四、五行也相对应地变为: 2._root_test_hello_SOURCES=hello.c 3._root_test_hello_LDADD=../lib/libhello.a

在windows系统下安装PANDA全过程

在windows系统下安装PANDA的详细全步骤 1、在windows系统下安装虚拟机(Linux) 安装一个虚拟机.下载一个VMWare Player并安装 2、在Linux虚拟机中安装FSL (1)在FSL官网中,下载的FSLvm,MD5summer, fsl-5.0.8-centos6_64.tar.gz(如果是为 了使用PANDA下载fsl,我们建议使用fsl网站上前面两个Centos版本,这个版本在ubuntu下也是可以的,不要使用Debian/Ubuntu版本,使用这个版本是用不了PANDA的) 将下载的FSLvm,MD5summer并解压 运行MD5summer,选择FSLVm6_64文件夹,点击Create sums. 选择FSLVm6_64文件夹,点击Create sums.

Select All -> Add -> OK. 形成一个FSLVm6_64.md5文件 运行VMWare Player -> Open a Virtual Machine.

选择FSLVm6_64,然后Play.第一次运行的时候会问if the VM was moved or copied,选择I copied it.然后可能要更新. 如果没有自动跳出FSLVM6_64,则选择打开虚拟机,选择刚才生成好的 登陆,密码是fsluser.

(2)进入linux的界面中, 1)将fsl-5.0.8-centos6_64.tar.gz拷贝到/home/fsl下,打开一个终端(Ctrl + Alt + T)2)进入/home/fsl目录下 cd /home/fsl 3)解压压缩包 tarzxvffsl-5.0.8-centos6_64.tar.gz 4)切换到root用户下 su输入密码fslroot 5) 将fsl的环境变量写到系统文件中(只需将下面命令拷贝到终端执行) echo "FSLDIR=/home/fsl/fsl" >> /etc/profile echo ". \${FSLDIR}/etc/fslconf/fsl.sh" >> /etc/profile

Nessus在windows下地安装与使用

Nessus的安装和使用 1Nessus的简介 Nessus被认为是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用 Nessus 作为扫描该机构电脑系统的软件。 1998年, Nessus 的创办人 Renaud Deraison 展开了一项名为 "Nessus"的计划,其计划目的是希望能为因特网社群提供一个免费、威力强大、更新频繁并简易使用的远端系统安全扫瞄程序。经过了数年的发展, 包括 CERT 与 SANS 等著名的网络安全相关机构皆认同此工具软件的功能与可用性。 2002年时, Renaud 与Ron Gula, Jack Huffard 创办了一个名为Tenable Network Security 的机构。在第三版的Nessus 发布之时, 该机构收回了 Nessus 的版权与程序源代码(原本为开放源代码), 并注册了 https://www.360docs.net/doc/583800943.html, 成为该机构的网站。目前此机构位于美国马里兰州的哥伦比亚。 2Nessus的特色 ●提供完整的电脑漏洞扫描服务, 并随时更新其漏洞数据库。 ●不同于传统的漏洞扫描软件, Nessus 可同时在本机或远端上摇控, 进行系 统的漏洞分析扫描。 ●其运作效能能随着系统的资源而自行调整。如果将主机加入更多的资源(例如 加快CPU速度或增加内存大小),其效率表现可因为丰富资源而提高。 ●可自行定义插件(Plug-in) ●NASL(Nessus Attack Scripting Language) 是由 Tenable 所开发出的语言, 用来写入Nessus的安全测试选项。 ●完整支持SSL (Secure Socket Layer)。 ●自从1998年开发至今已谕十年, 故为一架构成熟的软件。 3Nessus的安装和注册 3.1 安装 首先,要安装Nessus必须确认你所安装的硬盘的分区格式是NTFS,如果是FAT32,安装完成后客户端无法登陆。要在Windows上安装nessus,需要到Nessus的官方网站上下载Windows版本的Nessus,下载地址:https://www.360docs.net/doc/583800943.html,/nessus/。在首页上选择Download选项,然后在页面上会出现各种版本的nessus,有Windows,FreeBSD,Linux和Mac OS X操作系统等版本,我们选择的是Windows版本,之后会出现两中类型的nessus,64bit和32bit,请按你CPU的类型选择。目前的nessus版本是Nessus 4.2.2。

[Linux]链接,静态库和动态库

[Linux]链接,静态库和动态库 Filename:[Linux]链接,静态库和动态库 Version:V1.0 Date:12/01/2009 Author:S.C.Leon ============================================================== ======= 在Linux中创建静态库和动态库 一、基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。 本文仅限于介绍linux下的库。 1.2库的种类 linux下的库有两种:静态库和共享库(动态库)。 二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。 共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。 1.3库存在的意义 库是别人写好的现有的,成熟的,可以复用的代码,你可以使用但要记得遵守许可协议。 现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 共享库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。

1.4库文件是如何产生的在linux下 静态库的后缀是.a,它的产生分两步 Step 1.由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表 Step 2.ar命令将很多.o转换成.a,成文静态库 动态库的后缀是.so,它由gcc加特定参数编译产生。 具体方法参见后文实例。 1.5库文件是如何命名的,有没有什么规范 在linux下,库文件一般放在/usr/lib和/lib下, 静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称 动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号,minor是副版本号 1.6如何知道一个可执行程序依赖哪些库 ldd命令可以查看一个可执行程序依赖的共享库, 例如# ldd /bin/lnlibc.so.6 => /lib/libc.so.6 (0×40021000)/lib/ld-linux.so.2 => /lib/ld- linux.so.2 (0×40000000) 可以看到ln命令依赖于libc库和ld-linux库 1.7可执行程序在执行的时候如何定位共享库文件 当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路径 此时就需要系统动态载入器(dynamic linker/loader) 对于elf格式的可执行程序,是由ld-linux.so*来完成的,它先后搜索elf文件的DT_RPATH段—环境变量LD_LIBRARY_PATH—/etc/ld.so.cache文件列表— /lib/,/usr/lib目录找到库文件后将其载入内存 如:export LD_LIBRARY_PATH=’pwd’ 将当前文件目录添加为共享目录 1.8在新安装一个库之后如何让系统能够找到他 如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其他操作。

Cacti-0.8.8b详细安装及配置步骤

1.Cacti环境安装 1.1安装LAMP环境 安装LAMP环境,当然,如果你有兴趣可以采用编译,我线上Mysql是编译的,其余是yum安装的。在这次实验采用yum安装。 关闭iptables与selinux,如果有需要,后面再开启。配置好yum源,开始安装。 yum -y install httpd http-devel httpd-manual mysql mysql-devel mysql-server php php-devel php-mysql php-common php-pdo php-gd lm_sensors net-snmp php-snmp net-snmp-utils chkconfig mysqld on chkconfig httpd on chkconfig snmpd on service mysqld start service httpd start service snmpd start 在浏览器中输入http://serverip,查看测试页有没有出现。 1.2配置snmp vim /etc/snmp/snmd.conf

#/etc/init.d/snmpd restart 验证snmp配置是否正确, # snmpwalk -v 2c -c public 127.0.0.1 if 表示正确 IF-MIB::ifIndex.1 = INTEGER: 1 IF-MIB::ifIndex.2 = INTEGER: 2 IF-MIB::ifDescr.1 = STRING: lo 如果提示Timeout: No Response from 127.0.0.1则配置不对。 1.3创建数据库存储cacti的数据

linux下静态库与动态库的区别

静态库与动态库 什么是库 库是写好的,现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。 所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤: 静态库 之所以称为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。 试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o/.obj 文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。静态库特点总结如下: ?静态库对函数库的链接是放在编译时期完成的。 ?程序在运行时与函数库再无瓜葛,移植方便。

?浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。 Linux下创建与使用静态库 Linux静态库命名规则 Linux静态库命名规范,必须是"lib[your_library_name].a":lib为前缀,中间是静 态库名,扩展名为.a。 创建静态库(.a) 通过上面的流程可以知道,Linux创建静态库过程如下: ?首先,将代码文件编译成目标文件.o(StaticMath.o) g++ -c StaticMath.cpp 注意带参数-c,否则直接编译为可执行文件 ?然后,通过ar工具将目标文件打包成.a静态库文件 ar -crv libstaticmath.a StaticMath.o 生成静态库libstaticmath.a 图3.Linux下使用静态库 大一点的项目会编写makefile文件(CMake等等工程管理工具)来生成静态库,输入多个命令太麻烦了。 使用静态库 Linux下使用静态库,只需要在编译的时候,指定静态库的搜索路径(-L选 项)、指定静态库名(不需要lib前缀和.a后缀,-l选项)。 g++ TestStaticLibrary.cpp -L../StaticLibrary -lstaticmath

相关文档
最新文档