one makefile file
- #gcc test.cpp -L. -Wl,-Bdynamic -ltestlib -Wl,-Bstatic -ltestlib -Wl,-Bdynamic
- #make clean; make init; make SERVER_NAME=krc_search
- #make clean; make init; make SERVER_NAME=krc_feedback
- CC=g++
- OBJ_PATH=./objs
- SERVER_SRC = $(wildcard *.cpp)
- SERVER_OBJ = $(patsubst %.cpp, $(OBJ_PATH)/%.o, $(SERVER_SRC))
- INCDIR= -I/usr/local/freetds0.91/include \
- -I/usr/local/include \
- -I/usr/include \
- -I../Component/inc \
- -I../Component/inc/jsoncpp \
- -I../redis-2.6.13/deps -I./
- LIBDIR= -L/usr/lib64 -L/usr/lib64/mysql -L/usr/local/freetds0.91/lib -L../Component/inc
- SOLIBS= -lcrypto -lcurl -lmysqlclient -lsybdb
- WLPATH= -Wl,--rpath=/usr/local/freetds0.91/lib \
- -Wl,--rpath=/usr/lib64/boost \
- -Wl,--rpath=/usr/local/lib \
- -Wl,--rpath=/usr/lib \
- -Wl,--rpath=/usr/lib64/mysql \
- -Wl,--rpath=/usr/local/freetds0.91/lib
- ARLIBS= -Wl,-Bstatic ../Component/inc/libcomponent.a \
- -Wl,-Bstatic /usr/lib64/boost/libboost_system.a \
- -Wl,-Bstatic /usr/lib64/boost/libboost_thread.a \
- -Wl,-Bstatic /usr/lib64/boost/libboost_regex.a \
- -Wl,-Bstatic /usr/local/lib/libevent.a \
- -Wl,-Bstatic /usr/local/freetds0.91/lib/libsybdb.a \
- -Wl,-Bstatic ../Component/inc/jsoncpp/libjsoncpp.a \
- -Wl,-Bstatic ../redis-2.6.13/deps/hiredis/libhiredis.a
- $(SERVER_NAME):$(SERVER_OBJ)
- $(CC) -Wall -pthread -D KRC_SERVER_NAME=$(SERVER_NAME)_FLAG -g -o $@ $(INCDIR) $(WLPATH) $^ $(ARLIBS) $(LIBDIR) -Wl,-Bdynamic $(SOLIBS)
- init:
- @mkdir -p ./objs
- unit_test: CommonUtil.cpp testUtil/DgramSock.cpp testUtil/TestUtil.cpp
- $(CC) -pthread -g -o $@ $(INCDIR) $(WLPATH) $^ $(ARLIBS) $(LIBDIR) -Wl,-Bdynamic $(SOLIBS)
- clean:
- rm -rf *.o krc_search unit_test krc_feedback objs
- $(SERVER_OBJ):$(OBJ_PATH)/%.o:%.cpp
- $(CC) -c -g -D KRC_SERVER_NAME=$(SERVER_NAME)_FLAG $(INCDIR) $< -o $@
- help:
- @echo "make clean; make init; make SERVER_NAME=krc_search"
- @echo "make clean; make init; make SERVER_NAME=krc_feedback"
注意:动态库与静态库的混合链接
Linux默认的链接是动态库,找不到动态库的情况下才会选择静态库;
使用方式为:gcc test.cpp -L. -ltestlib
如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接静态库;
使用方式为:gcc test.cpp -L. -static -ltestlib
当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连接的方式。这时需要作用-Wl的方式:
gcc test.cpp -L. -Wl,-Bstatic -ltestlib -Wl,-Bdynamic -ltestlib
另外还要注意系统的运行库使用动态连接的方式,所以当动态库在静态库前面连接时,必须在命令行最后使用动态连接的命令才能正常连接,如:
gcc test.cpp -L. -Wl,-Bdynamic -ltestlib -Wl,-Bstatic -ltestlib -Wl,-Bdynamic
from:http://blog.csdn.net/gdutliuyun827/article/details/17320599
one makefile file的更多相关文章
- 【转】Linux makefile 教程 非常详细,且易懂
From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...
- Makefile经典教程(掌握这些足够)
makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员 ...
- Linux makefile 教程 非常详细,且易懂
最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...
- 1.3 Makefile 工程管理
1. 为什么得用Makefile 单步命令生成led.bin [root@cfm880 lesson1]# cd .. [root@cfm880 Part1]# mkdir lesson3 [root ...
- make file教程(转)
最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...
- 跟我一起写 Makefile
转自 陈皓 的博客:http://blog.csdn.net/haoel/article/details/2886 1. 概述 2. 关于程序的编译和链接 3. Makefile 介绍 4. Make ...
- [转] Makefile经典教程(掌握这些足够)
目录(?)[-] Makefile 介绍 1 Makefile的规则 2 一个示例 3 make是如何工作的 4 makefile中使用变量 5 让make自动推导 6 另类风格的makefile 7 ...
- [转]Linux下的Makefile
Makefile 介绍——————— make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序. 首先,我们用一个示例来说明Makefile的书写规则.以便 ...
- 【转载】Linux下makefile详解--跟我一起写 Makefile
概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
随机推荐
- cc2530 timer 3 PWM <可调占空比>
前提: 开始用的是 cc2530 timer 1来做PWM的,已经可调占空比了,但是由于硬件的改动,需要用timer 3 和 timer 4 代替.由于调试过程中出了些小问题,于是自己把这个贴出来.关 ...
- FindWindow使用方法
函数功能:该函数获得一个顶层窗体的句柄,该窗体的类名和窗体名与给定的字符串相匹配.这个函数不查找子窗体.在查找时不区分大写和小写. 函数型:HWND FindWindow(LPCTSTR IpClas ...
- JFinal使用笔记1-部署demo项目到本地tomcat
http://my.oschina.net/u/173975/blog/110261 尝试用JFinal开发个开源的社团管理系统,把开发过程中遇到的问题和解决办法记下来,以供参考. 部署jfinal_ ...
- UITableViewCell 高度自适应
UITableViewCell 高度自适应一直是我们做动态Cell高度时遇到的最烦躁的问题,Cell动态高度计算可以去看看sunny的这篇文章介绍,今天主要和大家分享下我在使用systemLayout ...
- iOS 10 升级后无法真机测试 Could not find Developer Disk Image
---2016年9月20日更新 iOS 升级到10之后,你会发现无法进行真机测试了.这种情况我在iOS 8.4 .9.3更新的时候也遇到过.原因是Xcode 的DeviceSupport里面缺少了iO ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
- Redis 和 Memcached 的区别
来源:标点符 链接:http://www.biaodianfu.com/redis-vs-memcached.html Redis 的作者 Salvatore Sanfilippo 曾经对这两种基于内 ...
- 阿里封神谈hadoop学习之路
阿里封神谈hadoop学习之路 封神 2016-04-14 16:03:51 浏览3283 评论3 发表于: 阿里云E-MapReduce >> 开源大数据周刊 hadoop 学生 s ...
- Distributed locks with Redis--官方
原文:http://redis.io/topics/distlock Distributed locks with Redis Distributed locks are a very useful ...
- html笔记 横向两列布局
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...