#.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静态库的生成和调用的更多相关文章

  1. makefile编写---.so动态库的生成和调用

    http://blog.sina.com.cn/s/blog_559f6ffc0100fl3z.html  动静 http://blog.csdn.net/yuyunliuhen/article/de ...

  2. vc6静态库的生成和调用

    转自vc6静态库的生成和调用 1.静态库的生成: 在vc6.0++中Ctrl+N选择Projects下的Win32 Static Library,Project name:SumLib,点击OK,下一 ...

  3. malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

     1.在main方法里面直接定义一个很大的数组的时候.可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void ...

  4. QT中静态库的生成与使用

    一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...

  5. QT中静态库的生成与使用——创建共享库代码,附例子

    一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...

  6. linux静态库的生成与使用(转)

    linux静态库的生成与使用(转) 库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linu ...

  7. VS2008 动态库和静态库的生成和加载

    第一:动态库和静态库的生成: 1) 新建一个生成dll工程: 文件->新建->项目->Win32->Win32控制台应用程序 输入项目名称:dllTest ,项目路径:D:\V ...

  8. 嵌入式开发之makefile---交叉编译静态库和动态库的生成和调用

    c和cpp 混合的动态库生成: $(LIBSO): $(COBJS) $(CPPOBJS) $(CPP) -shared -o $@ $^ $(LIBS) ////////////////////// ...

  9. c++调用自己编写的静态库(通过eclipse)

    转:https://blog.csdn.net/hao5335156/article/details/80282829 参考:https://blog.csdn.net/u012707739/arti ...

随机推荐

  1. 刷新神经网络新深度:ImageNet计算机视觉挑战赛微软中国研究员夺冠

    微软亚洲研究院首席研究员孙剑 世界上最好计算机视觉系统有多精确?就在美国东部时间12月10日上午9时,ImageNet计算机视觉识别挑战赛结果揭晓——微软亚洲研究院视觉计算组的研究员们凭借深层神经网络 ...

  2. SpringMVC学习记录(七)--拦截器的使用

    SpringMVC的请求如以下这样的图所看到的: 能够看出全部的请求都要通过Dispatherservlet来接收,然后通过Handlermapping来决定使用哪个控制器,再依据ViewResolv ...

  3. SVG 基础图形

    SVG 基础图形 SVG包含了以下的基础图形元素: 矩形(包括可选的圆角),使用<rect>元素创建 圆形,使用<circle>元素创建 椭圆形,使用<ellipse&g ...

  4. 记录一个奇妙的Bug, -1 &gt;= 2 ?

    直接上代码: #include <iostream> #include <vector> using namespace std; int main() { vector< ...

  5. VC 使用json cpp 静态库 问题解决

    release使用 json 静态库 提示 fatal error C1083: 无法打开编译器生成的文件:“../../build/vs71/release/lib_json\json_writer ...

  6. asp.net 复习总结

    1.asp.net页面上格式化时间是:<%# Eval("jsBianhao", "{0:yyyy/MM/dd}")%>

  7. asp.net+mvc+easyui+sqlite 简单用户系统学习之旅—— 摘要

    首次接触asp.net开发,希望把自己的学习之旅写下来,一方面做个知识归纳技术总结,另一方面开放到博客中,和大家一起交流学习! asp.net是目前流行的web开发技术之一,是微软旗下开发的基于.ne ...

  8. 异步编程C#回调方法

    1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库.异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方 ...

  9. 关于SVN提交强制加入注释

    一.摘要 场景: 在这次开发项目过程中,团队中总是有人忘记添加注释. 问题: 1:其他成员不知道你提交是什么代码, 给回滚操作带来很多不必要的麻烦. 2:这个工作需要有一个人天天提醒大家在提交代码的时 ...

  10. Silverlight:telerik RadControls中RadGridView的一个Bug及解决办法(转载)

    当RadGridView中嵌套RadComboBox,且RadGridView的高度不够出现滚动条时,上下拉动滚动条后,RadComboBox中的选中值将丢失! 如下图: 滚动条未拖动前 滚动条上下拖 ...