makefile编写---.a静态库的生成和调用
#.SUFFIXES: .c .o
Cc =gcc
#OSA=/data/users/osa
IncDir=-I. -I./
Debug = -g
Cflags = -c $(DEBUG)
Libs = -lpthread
Lib_Dir=./
#/data/users/osa/api/
#PKIOBJ=PKITool.o kdmd5.o
Lib=alg.a
PkiObj=alg.o
.c.o:
$(Cc) $(Cflags) $(IncDir) $*.c
all: PKITool
#clean
PKITool:$(PkiObj)
ar ruv $(Lib_Dir)$(Lib) *.o
ranlib $(Lib_Dir)$(Lib)
clean:
rm *.o
target=testmake
cc = gcc
objects = main.o
#mult.o sub.o
link =
cflags = Wall -O
lflags = -lpthread
ar = ar
includes = -l
includelib =./alg.a
.PHONY:clean
all:$(target)
$(target):$(objects)
$(cc) $^ -o $@ $(lflag) $(includelib)
#$(objects) == $^
#edit:$(objects)
# $(cc) -o edit $(objects)
#$(TARGET): $(OBJS)
# $(CC) $^ -o $@ $(INCLUDE) $(LFLAGS)
main.o:main.c alg.h
$(cc) -c main.c
clean:
-rm *.o $(target)
这里的main调用库不能以系统文件形式包含
/***********************以上是ok的********************************/
bug1:
CLib = -L. inilib.a //这里没加-l
$(Target): $(Cobjects)
$(GCC) $(CLib) -o $@ $^
上面的顺序会导致错误如下
gcc -L. inilib.a -o TestIni main.o
main.o: In function `main':
main.c:(.text+0x35): undefined reference to `iniParser_init'
main.c:(.text+0x154): undefined reference to `iniParser_getString'
main.c:(.text+0x1b4): undefined reference to `iniParser_setString'
main.c:(.text+0x1c9): undefined reference to `iniParser_uinit'
solve1:
是依赖库.a 放错位置
$(Target): $(Cobjects)
$(GCC) -o $@ $^ $(CLib) 这样就可以通过
bug2:
CLib = -L. -linilib.a
$(Target): $(Cobjects)
$(GCC) -o $@ $^ $(CLib) //
root@ubuntu:/opt/54/app/ini/inifileok/iniapi# make -f Makefiles all
gcc -L. -linilib.a -o TestIni main.o
/usr/bin/ld: cannot find -linilib.a
collect2: ld returned 1 exit status
make: *** [TestIni] 错误 1
solve2:
CLib = -L. inilib.a //去掉-l 而且这里-L. 就是表示在当前目录加载路径
下面的静态库生成 ,调用是可以的
create:
Target = TestIni
TargetLib = inilib.a
GCC = gcc
G++ = g++
CInc = $(wildcard *.h)
CSrc = $(wildcard *.c)
Cobjects =$(CSrc:%.c=%.o)
#Cobjects =$(patsubst %.c,%.o,$(CSrc))
lib:$(TargetLib)
release:$(Target)
$(Target): $(Cobjects)
$(GCC) -o $@ $^
$(TargetLib): $(Cobjects)
ar ruv $(TargetLib) $^
# ar rcs $(TargetLib) $^
##################test######################
#CInc += iniparser.h dictionary.h
#CSrc += iniparser.c dictionary.c
#Cobjects += iniparser.o dictionary.o
#CppObejects =
#$(Cobjects):$(Csrc)
# $(GCC) $(CInc) -c $<
#$(Target): iniparser.o dictionary.o
# $(GCC) -o $@ $^
#iniparser.o: iniparser.c
# $(GCC) $(CInc) -c $<
#dictionary.o: dictionary.c
# $(GCC) $(CInc) -c $<
clean:
rm -rf *.o $(Target) *.gch
////////////////////////////////////////////////////////////
load:
Target = TestIni
TargetLib = ./inilib.a
GCC = gcc
G++ = g++
CInc = $(wildcard *.h)
CSrc = $(wildcard *.c)
CInc = -I ./
CLib = -L. inilib.a
Cobjects =$(CSrc:%.c=%.o)
#Cobjects =$(patsubst %.c,%.o,$(CSrc))
all:release
lib:$(TargetLib)
release:$(Target)
$(Target): $(Cobjects)
$(GCC) -o $@ $^ $(CLib)
#$(Target):$(Cobjects)
# $(GCC) $^ -o $@ $(TargetLib)
##################test######################
#CInc += iniparser.h dictionary.h
#CSrc += iniparser.c dictionary.c
#Cobjects += iniparser.o dictionary.o
#CppObejects =
#$(Cobjects):$(Csrc)
# $(GCC) $(CInc) -c $<
#$(Target): iniparser.o dictionary.o
# $(GCC) -o $@ $^
#iniparser.o: iniparser.c
# $(GCC) $(CInc) -c $<
#dictionary.o: dictionary.c
# $(GCC) $(CInc) -c $<
clean:
rm -rf *.o $(Target) *.gch
makefile编写---.a静态库的生成和调用的更多相关文章
- makefile编写---.so动态库的生成和调用
http://blog.sina.com.cn/s/blog_559f6ffc0100fl3z.html 动静 http://blog.csdn.net/yuyunliuhen/article/de ...
- vc6静态库的生成和调用
转自vc6静态库的生成和调用 1.静态库的生成: 在vc6.0++中Ctrl+N选择Projects下的Win32 Static Library,Project name:SumLib,点击OK,下一 ...
- malloc,colloc,realloc内存分配,动态库,静态库的生成与调用
1.在main方法里面直接定义一个很大的数组的时候.可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void ...
- QT中静态库的生成与使用
一. 静态库的生成 1. 测试目录: lib 2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...
- QT中静态库的生成与使用——创建共享库代码,附例子
一. 静态库的生成 1. 测试目录: lib 2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...
- linux静态库的生成与使用(转)
linux静态库的生成与使用(转) 库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linu ...
- VS2008 动态库和静态库的生成和加载
第一:动态库和静态库的生成: 1) 新建一个生成dll工程: 文件->新建->项目->Win32->Win32控制台应用程序 输入项目名称:dllTest ,项目路径:D:\V ...
- 嵌入式开发之makefile---交叉编译静态库和动态库的生成和调用
c和cpp 混合的动态库生成: $(LIBSO): $(COBJS) $(CPPOBJS) $(CPP) -shared -o $@ $^ $(LIBS) ////////////////////// ...
- c++调用自己编写的静态库(通过eclipse)
转:https://blog.csdn.net/hao5335156/article/details/80282829 参考:https://blog.csdn.net/u012707739/arti ...
随机推荐
- C# 7 新特性-1
来源https://www.kenneth-truyers.net/2016/01/20/new-features-in-c-sharp-7/ Tuples What Tuples是数据的临时分组.区 ...
- Swift,初始化
1.class中的值是没办法不赋值,不然会报错,那么就有个init的方法初始化(这个方法使得实例时必须加上参数) class test{ var a:String var b:Int init(a:S ...
- Easyui的numberbox无法输入以0开头的数字编号(转载)
1.问题 项目中碰到这样一个问题,Easyui的numberbox在输入数字编号的时候不能以0开头 在我输入以0开头的数字编号后,离开输入框的时候,那个前缀0就自动去掉了. 接下来,我们查看API说明 ...
- [shell编程] sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
转载地址:http://www.cnblogs.com/pipelone/archive/2009/04/17/1437879.html 在Linux中执行.sh脚本,异常/bin/sh^M: bad ...
- web UIproject师必读的一篇文档,写的很好
今天在花瓣网上看到的一片文章.写的是web UIproject师的工作应该是如何的,内容非常精彩,分享给小伙伴.希望web UIproject师看了之后有所启示. 我不是一个简单的web UI htt ...
- qml自学笔记------自己写相似于劲舞团的按键小游戏(中)
接上篇<qml自学笔记------自己写类似于劲舞团的按键小游戏(上)> 第三部分DisplayPart.qml 代码的其它部分都是渣,就这里花了点时间,整个小游戏就靠这个文件. 首先,屏 ...
- Microsoft.VisualC 命名空间包含支持用 c + + 语言的代码生成和编译的类。 混合编程中使用COM接口指针
Microsoft.VisualC 命名空间包含支持用 c + + 语言的代码生成和编译的类. Microsoft.VisualC.StlClr Unmanaged Code 和 Managed Co ...
- OpenGL 资源汇编
本文收集和汇总了 OpenGL 的文档.教程和在线书籍,供学习和开发者參考. OPENGL开发教程:http://www.linuxgraphics.cn/opengl/index.html Open ...
- SQL Server 2008R2发布与订阅的配置
使用SQL Server的发布与订阅可以将一个数据库的数据实时传送到另一个数据库中,使用这种方式与Link Server相比可以减少对数据库的连接次数.下面介绍SQL Server 2008R2发布与 ...
- iOS开发-drawRect方法小技巧(超短)
获取画布: CGContextRef context = UIGraphicsGetCurrentContext(); 设置颜色的三种方法: [[UIColor blueColor] setStrok ...