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

用GCC将源文件编译成库文件的问题

    来源: 互联网  发布时间:2015-10-19

    本文导语:  由于工作分工的问题,我做一个项目的一部分,大概情况是这样: 我用a.h,a.c,b.h,b.c,c.h,c.c来完成一个功能模块,由别人调用a.h中的一个函数来启动我的这个模块,在b.c中还要调用另一个人写的功能模块,我想将a,b,c 编译成一...

由于工作分工的问题,我做一个项目的一部分,大概情况是这样:
我用a.h,a.c,b.h,b.c,c.h,c.c来完成一个功能模块,由别人调用a.h中的一个函数来启动我的这个模块,在b.c中还要调用另一个人写的功能模块,我想将a,b,c 编译成一个库文件,这样,在最后一起合成时提供一个my.o文件就可以了,别人调用我的函数,我也可以调用它人写的函数,用GCC怎样编译才好?
现在我可以用 gcc -c a.c这样的命令编译出a.o,b.o,c.o,但不知道怎样将这三个.o文件合成一个.o文件.
(在这三个文件中没有 main函数,这点要注意)
请给出详细的编译步骤,谢谢 !

|
将三个.o文件可以合并成一个.a文件,用ar来打包。之后就可以给你的同事调用了。( ar ru ..... )
最好写makefile
-------------------------------------
下面为一个很简单的makefile文件
OBJS = test.a
CC = gcc
CFLAGS = -Wall -g

all: $(OBJS)
$(OBJS) : m.o c.o b.o
         ar ru $@ $?
.c.o:
$(CC) -c -o $*.o $*.c
clean:
rm -rf $(OBJS)
rm -rf *.o

|
给个例子:
OBJS=serv_pub.o proc_pub.o Thread.o Semaphore.o Demon.o TradeIni.o
libDataProcess.so:$(OBJS)
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -shared -I ../Common -O2 -o libDataProcess.so $(OBJS) -lpthread -L../comm_bas -lGeneralFunction -L../datafile -lFileProcess -L../comm_utl -lDevice -L../GlbVarible -lGlbVarible

serv_pub.o:serv_pub.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -O2 -c serv_pub.cpp

proc_pub.o:proc_pub.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c proc_pub.cpp

TradeIni.o:TradeIni.cpp
g++ $(CFLAGS) -D T_DEBUG -D __LINUX__ -fPIC -c TradeIni.cpp

Semaphore.o:../Common/Semaphore.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Semaphore.cpp

Thread.o:../Common/Thread.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Thread.cpp

Demon.o:../Common/Demon.cpp
g++ $(CFLAGS) -D __LINUX__ -fPIC -c ../Common/Demon.cpp

clean:
rm -f *.o *.so 

|
用ar把3个.o文件合在一起就行了。也可以用gcc编译成动态库

|
Makefile文件 具体格式参看楼上 

|
二楼的CFLAGS = -Wall -g好象没用到

    
 
 

您可能感兴趣的文章:

  • 使用gcc,如何在Solaris上生成so动态库文件?
  • 在Unix环境下用gcc如何编译成动态链接库文件?类似Windows下的DLL文件。
  • 新手,gcc如何链接自己编的库文件呀?万分感激.
  • 请问:ubuntu下编译的openssl的.so文件放在那个目录 下阿?GCC如何导入.so的库文件?
  • 如何用gcc编译生成一个*.a库文件?
  • 老大们,#include "ump.h" 编不过,gcc的头文件和库文件载什么地方啊?
  • gcc link时默认的库文件是什么???
  • 今天第一次接触linux和gcc,看了点资料,试着编译一个源程序,却出现找不到库文件
  • 请问高手,在Solaris 8 gcc3.1编译的 *.o 和库文件 *.a ,可以提供在Solaris 7,9下使用吗?
  • 问GCC包含的头文件(c库文件)在哪个目录下
  • 装完了gcc,为什么找不到库文件?
  • 在linux下用gcc编程序,请问那一位高人有各种库文件的html或者chm文档
  • 关于用gcc(g++) 编译其它扩展名(比如hpp)的合法的源文件??
  • [求助]gcc时,误将-o 参数后面加了 .c ,结果源文件被覆盖了
  • 为什么我用GCC编译后,在源文件中定义的宏被修该了?(产生编译错误)
  • gcc如何编译带有源文件的c++程序
  • gcc编译时so库和源文件在同一个目录,如果用-L.编译出来的程序为什么还说是找不到so库?
  • 请问ubuntu下用gcc是否与其它linux不同?我用文本编辑器写的源文件编译不了
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • arm-linux-gcc交叉编译出错,但gcc编译没错,什么原因呢???
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • GCC3.4可以编译2.4内核吗 如何查看某版本内核是用哪个版本gcc编译的
  • 使用popen来执行gcc命令,如何根据读出来的gcc的输出来判断gcc是否编译成功?
  • 问:关于gcc编译器和g++编译器
  • 求一个编译好的的gcc编译器
  • 编译GCC时能不能只编译C/C++的编译器?
  • gcc编译时出错,gcc: installation problem, cannot exec `as': 没有那个文件或目录!!!求助呀呀!!!!!
  • 建立较差编译环境,编译gcc-3.4.4出错
  • gcc与arm-linux-gcc编译的问题???
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • Solaris8,安装了iconv,gcc和gcclib,然后用gcc编译c程序出错。
  • 使用eclipse 加入arm-elf-gcc 或arm-linux-gcc 编译器为什么不好使
  • 是否必须用同一版本GCC编译内核、应用程序、库甚至GCC自己?
  • linux x86_64下由于拷贝gcc的lib目录导致gcc编译器出错
  • GCC编译程序时,有自定义头文件,提示找不到该头文件,但他就在这个目录中,如何设置GCC参数?
  • 使用gcc编译器进行代码编译出来的程序是否遵循gpl协议
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • ubuntu 10.10出现极其诡异的情况,使用gcc编译没任何反应,可以继续输入,但是不提示任何错误;使用make编译效果一样;
  • 求助:当用 gcc 编译时没,加上优化选项 -02 ,可是提示是 gcc: unrecognized option `-02'
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 命令:mips_fp_le-gcc,mipsel-gcc 是什么意思?跟一般的gcc有什么区别?
  • 怎样升级我的GCC呀,我用的RH7.2,GCC 2.96 ,我从网上下载了一个gcc-3.2.3.tar.gz
  • arm-elf-gcc 和 arm-linux-gcc有什么区别?arm-elf-gcc里的elf代表什么?
  • gcc-ccore、avr-gcc及arm-gcc的区别
  • gcc在哪里?bash:gcc:command not found
  • 如何删掉GCC3.0(我需要GCC2.0-----)
  • Windows版GCC TDM-GCC
  • 急问:如何卸掉gcc 3.2庄gcc 2.96
  • 有人遇到过吗,在安装GCC时提示,"checking gcc ...no "
  • GCC无法安装的问题,希望有人帮我( Debian 4.04ra无法安装GCC)


  • 站内导航:


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

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

    浙ICP备11055608号-3