如何在Linux创建静态库和动态库

函数库分为静态库和动态库。



程序编译时,静态库将连接到目标代码,程序运行时不再需要静态库。



在编译程序时,动态库没有连接到目标代码,但在程序运行之前加载。因此,当程序运行时,需要动态库存。



计划1:你好,H。



#则hello_h



#定义hello_h



空hello(const char *名称);



# endif / / hello_h



计划2:你好,C



#包括



空hello(const char *名称)



{



Printf (Hello%s! n



}



方案3:主C。



#包括你好。H



主()



{



你好(每个人);



返回0;



}



动态库和静态库都需要使用O文件来生成和编译O文件。



# gcc的C C你好。



1:创建静态库



命名一个静态库文件名前缀为lib,然后与静态库的名字。扩展。例如,我们可以创建静态库的名字是myhello,是静态库文件名libmyhello A.



Ar Cr libmyhello,你好啊#



使用:只需要添加一个静态库包含了你需要使用你的源程序语句的功能(包含头文件),那么gcc生成时指定的静态库是好目标文件(除非你包含头文件 / usr /包括标准库,库文件/ usr / / lib库,,或你要表明他们的路径)



GCC啊主。C L - lmyhello #



#。 /你好



大家好!



将静态库文件删除以运行 hello,程序正常运行,表明静态库公共函数已链接到目标文件。



2:通过使用O文件创建动态库



动态库文件的扩展名是called.so。



GCC -shared -fPCI -o libmyhello.so hello.o #



动态库的使用与静态库的使用是相同的。



GCC啊主。C L - lmyhello #



#。 /你好



。 /您好:加载共享库时出错:libmyhello.so:不能打开共享对象文件:



哦,有一个错误。看看错误提示。事实证明,动态库文件libmyhello.so不能发现。当程序运行时,它会查找所需要的动态库文件在/ usr / lib和 / lib.if找到目录,动态库被加载,否则程序会提示终止程序像上面的错误。



有3种方法来查找生成的动态库。



1)复制图书馆到 / usr / lib和 / lib目录。



(2)添加的库的路径的ld_library_path环境变量。



例如,动态库libhello.so是 / / /家例lib目录:



出口ld_library_path =美元美元ld_library_path: / / / lib回家的例子



(3)修改 / / ld.so.conf等文件,添加的库的路径到文件的末尾,执行要想刷新。这样,添加目录下的所有文件都是可见的。



当静态库和动态库被命名时,GCC命令将优先使用动态库。



函数库分为静态库和动态库。



程序编译时,静态库将连接到目标代码,程序运行时不再需要静态库。



在编译程序时,动态库没有连接到目标代码,但在程序运行之前加载。因此,当程序运行时,需要动态库存。



计划1:你好,H。



#则hello_h



#定义hello_h



空hello(const char *名称);



# endif / / hello_h



计划2:你好,C



#包括



空hello(const char *名称)



{



printf(Hello %s!n



}



方案3:主C。



#包括你好。H



主()



{



你好(每个人);



返回0;



}



动态库和静态库都需要使用O文件来生成和编译O文件。



# gcc的C C你好。



1:创建静态库



命名一个静态库文件名前缀为lib,然后与静态库的名字。扩展。例如,我们可以创建静态库的名字是myhello,是静态库文件名libmyhello A.



Ar Cr libmyhello,你好啊#



使用:只需要添加一个静态库包含了你需要使用你的源程序语句的功能(包含头文件),那么gcc生成时指定的静态库是好目标文件(除非你包含头文件 / usr /包括标准库,库文件/ usr / / lib库,,或你要表明他们的路径)



GCC啊主。C L - lmyhello #



#。 /你好



大家好!



将静态库文件删除以运行 hello,程序正常运行,表明静态库公共函数已链接到目标文件。



2:通过使用O文件创建动态库



动态库文件的扩展名是called.so。



GCC -共享-联邦处罚和改造制度- O O # libmyhello.so你好。



动态库的使用与静态库的使用是相同的。



GCC啊主。C L - lmyhello #



#。 /你好



。 /您好:加载共享库时出错:libmyhello.so:不能打开共享对象文件:



哦,有一个错误。看看错误提示。事实证明,动态库文件libmyhello.so不能发现。当程序运行时,它会查找所需要的动态库文件在/ usr / lib和 / lib.if找到目录,动态库被加载,否则程序会提示终止程序像上面的错误。



有3种方法来查找生成的动态库。



1)复制图书馆到 / usr / lib和 / lib目录。



(2)添加的库的路径的ld_library_path环境变量。



例如,动态库libhello.so是 / / /家例lib目录:



出口ld_library_path =美元美元ld_library_path: / / / lib回家的例子



(3)修改 / / ld.so.conf等文件,添加的库的路径到文件的末尾,执行要想刷新。这样,添加目录下的所有文件都是可见的。



当静态库和动态库被命名时,GCC命令将优先使用动态库。