当前位置:  技术问答>linux和unix

请教Linux下C开发,怎么做成库文件,又怎么引用这个库文件?

    来源: 互联网  发布时间:2016-07-11

    本文导语:  谢谢。 | 通常做成共享库的话,在编绎时加上-shared参数,并把链接生成的文件名命名libxxx.so,可以放在/usr/lib下 其他程序引用这个库时,在链接的时候加上-lxxx就可以了。 | 就是这样...

谢谢。

|
通常做成共享库的话,在编绎时加上-shared参数,并把链接生成的文件名命名libxxx.so,可以放在/usr/lib下

其他程序引用这个库时,在链接的时候加上-lxxx就可以了。

|

就是这样的了 楼主试试

|
编辑好代码以后,编译时采用类似下面的命令可生成"共享库"(假如源文件是myfun.c):
gcc -shared -fPIC -Wmyfun.c -0 libmy.so
解释: -shared 生成共享库;
      -fIPC 表示“位置无关代码”(Position Independent Code),可不加;
      -W 表示输出警告信息,可不加;
      库文件的命名要按照libxxxx.so的格式;

要引用这个库时:
      gcc xxx.c -0 xxx.out -lmy
     -l 表示设定要连接的库(libmy.so,输my便可)  

|
动态库还是静态库
静态库方法:
文件名:lib.c
先编译成目标文件 gcc -o mylib.o -c lib.c
然后创建静态库,将mylib.o放到libmylib.a中 ar rcs libmylib.a mylib.o
最后copy到库目录下/usr/lib   cp libmylib.a /usr/lib/libmylib.a

在编写的时候直接调用其中的函数就是了,只不过在编译的时候要加入-l选项后面跟上库名
如 gcc -o test test.c -lmylib  //mylib是前面创建的库的名称

动态库 创建就是 gcc -fPIC -share -o mylib.so lib.c
调用也分两种方法
1是 gcc -o test test.c ./libmylib.so //注意这里跟的是动态库的路径
第二种是使用动态库的函数 你man dlopen看下那几个函数看下就知道了就不多说了

|

UP

|
  学习了

|

我们知道.a文件就是几个.o文件合在一起用于静态链接.

 

 

假设我们有如下四个文件

view plaincopy to clipboardprint?
/**********************************  
*文件main.c  
***********************************/  
#include    
int main()   
{   
    F1();   
    F2();   
    F3();   
    printf("An");   
    printf("Bn");   
    return 0;   
}   
/****************************************  
*文件file1.c  
*****************************************/  
void F1()   
{   
    printf("F1n");   
}   
/****************************************  
*文件file2.c  
*****************************************/  
void F2()   
{   
    printf("F2n");   
}   
/****************************************  
*文件file2.c  
*****************************************/  
void F3()   
{   
    printf("F3n");   
}  
/**********************************
*文件main.c
***********************************/
#include 
int main()
{
    F1();
    F2();
    F3();
    printf("An");
    printf("Bn");
    return 0;
}
/****************************************
*文件file1.c
*****************************************/
void F1()
{
    printf("F1n");
}
/****************************************
*文件file2.c
*****************************************/
void F2()
{
    printf("F2n");
}
/****************************************
*文件file2.c
*****************************************/
void F3()
{
    printf("F3n");
}
 


分别用用命令gcc –c main.c

             Gcc –c file1.c

             Gcc –c file2.c

             Gcc –c file3.c

可以生成四个.o文件,分别是mian.o file1.o file2.o file3.o

然后用ar –r lib.a main.o file1.o file2.o file3.o

即可以生成一个lib.a 的打包文件.

如果要编译代码,我们可以用命令gcc –o test lib.a

即可以生成一个test.exe 的可执行文件


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wxdcxp/archive/2009/10/08/4641898.aspx

|
学习下。

|
不错   

|
基本方法就是这样。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教:Applet引用了Swing,为何在IE中没法运行啊?
  • 请教linux高手,关于引用变量值的问题
  • 请教高手,C++返回类对象引用问题
  • To masterz():本人愚笨,向你再请教一个问题 在静态上下文中不能引用非静态变量 this
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3