免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9368 | 回复: 10
打印 上一主题 下一主题

[C] Linux下static library的编译 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-05 09:24 |只看该作者 |倒序浏览
10可用积分
Linux下有一xx.c文件,通过imakefile来生成Makefile的。原先在生成Makefile的基础上执行make就可以生成执行文件,
但现在有点问题,在有些机器上不能执行,于是想做成static library的来试试。
请问应试如何以static library编译?

最佳答案

查看完整内容

不用加 -static参数吧?直接将.a文件作为输入,类似:gcc -o tvs tvs.c xx.a -L/usr/lib ...

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 2009-09-05 09:24 |只看该作者

回复 #8 vvmao 的帖子

不用加 -static参数吧?
直接将.a文件作为输入,类似:
gcc -o tvs tvs.c xx.a -L/usr/lib ...

论坛徽章:
0
3 [报告]
发表于 2009-09-05 09:36 |只看该作者
cc  -static ...
代码就会嵌入你的程序。

论坛徽章:
0
4 [报告]
发表于 2009-09-05 09:37 |只看该作者
1、用gcc的-c选项生成.o文件,如
gcc -c test1.c test2.c test3.c
编译后会生成test1.o  test2.o   test3.o三个目标文件。
2、然后用ar命令生成.a文件,如
ar crv  test.a  test1.o  test2.o  test3.o

论坛徽章:
0
5 [报告]
发表于 2009-09-05 10:00 |只看该作者
原帖由 prolj 于 2009-9-5 09:37 发表
1、用gcc的-c选项生成.o文件,如
gcc -c test1.c test2.c test3.c
编译后会生成test1.o  test2.o   test3.o三个目标文件。
2、然后用ar命令生成.a文件,如
ar crv  test.a  test1.o  test2.o  test3.o


试了下,但在仿照下面的做法
%gcc -c out.c
%ar -cr libout.a out.o
%gcc -o pig main.c -L. -lout
会在第三步产生很多类似undefine reference to 'XOpenDevice'的错误。


.c文件的头文件如下:
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Xutil.h>
#include <X11/Xmd.h>
#include <X11/extensions/XI.h>
#include <X11/extensions/XInput.h>
#include "fcntl.h"
#include <ctype.h>
#include "stdio.h"

imakefile文件如下:
XCOMM $XConsortium: Imakefile,v 1.4 93/08/16 16:07:59 rws Exp $
        DEPLIBS = $(DEPXLIB) $(DEPXILIB)
        LOCAL_LIBRARIES = $(XLIB) $(XILIB)
#        SYS_LIBRARIES = MathLibrary
#DEPLIBS= $(DEPXONLYLIB)
#LOCAL_LIBRARIES = $(XONLYLIB)
SRCS = tvs.c
OBJS = tvs.o

ComplexProgramTarget(tvs)
InstallAppDefaults(tvs)

以前是通过xmkmf -a 生成Makefile的,然后执行make产生执行文件。

论坛徽章:
0
6 [报告]
发表于 2009-09-05 10:05 |只看该作者
lib.a内容不全,要把Xlib也静态a了

论坛徽章:
0
7 [报告]
发表于 2009-09-05 10:15 |只看该作者
原帖由 prolj 于 2009-9-5 10:05 发表
lib.a内容不全,要把Xlib也静态a了

要怎么将Xlib也静态了,这是系统的吧。

论坛徽章:
0
8 [报告]
发表于 2009-09-05 10:32 |只看该作者
系统的是so的,你要求a的,要不ar系统的so,要不自己编译X,还有别的选择么?

论坛徽章:
0
9 [报告]
发表于 2009-09-05 14:26 |只看该作者
原帖由 prolj 于 2009-9-5 10:32 发表
系统的是so的,你要求a的,要不ar系统的so,要不自己编译X,还有别的选择么?


为什么用gcc -o tvs tvs.c -L/usr/lib -lX11 -lXext -lXi 可以编译,
但加上-static : gcc -o tvs -static tvs.c -L/usr/lib -lX11 -lXext -lXi 就不行了?

论坛徽章:
0
10 [报告]
发表于 2009-09-05 16:30 |只看该作者
原帖由 happy_fish100 于 2009-9-5 16:21 发表
不用加 -static参数吧?
直接将.a文件作为输入,类似:
gcc -o tvs tvs.c xx.a -L/usr/lib ...



但这样编译出来的不是静态的吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP