#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的更多相关文章

  1. 【转】Linux makefile 教程 非常详细,且易懂

    From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...

  2. Makefile经典教程(掌握这些足够)

    makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员 ...

  3. Linux makefile 教程 非常详细,且易懂

    最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

  4. 1.3 Makefile 工程管理

    1. 为什么得用Makefile 单步命令生成led.bin [root@cfm880 lesson1]# cd .. [root@cfm880 Part1]# mkdir lesson3 [root ...

  5. make file教程(转)

    最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

  6. 跟我一起写 Makefile

    转自 陈皓 的博客:http://blog.csdn.net/haoel/article/details/2886 1. 概述 2. 关于程序的编译和链接 3. Makefile 介绍 4. Make ...

  7. [转] Makefile经典教程(掌握这些足够)

    目录(?)[-] Makefile 介绍 1 Makefile的规则 2 一个示例 3 make是如何工作的 4 makefile中使用变量 5 让make自动推导 6 另类风格的makefile 7 ...

  8. [转]Linux下的Makefile

    Makefile 介绍——————— make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序. 首先,我们用一个示例来说明Makefile的书写规则.以便 ...

  9. 【转载】Linux下makefile详解--跟我一起写 Makefile

    概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...

随机推荐

  1. PowerShell查询sql server

    function Invoke-SQL1: function Invoke-SQL { param( [string] $DBServer, [string] $Database, [string] ...

  2. 授予普通域用户远程桌面连接DC/客户端权限

    普通域用户通过远程桌面登录DC: 1)将该用户加入到 Remote Desktop Users 组中

  3. C++ 继承的访问权限

    1.它解决什么问题?为什么设计出继承的各种访问权限? 可以这样认为,C++继承会把父类的东西拉到自己这里,这些东西都是自己的,父类中的字段和方法都有访问权限,如果我想改变这些东西的访问权限,该怎么办? ...

  4. Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动

    不多说了,直接看代码, NB人会懂的! package com.example.vdisktest; import android.app.Activity; import android.conte ...

  5. VC depends使用说明

    Depends用来显示与一个可执行文件(exe或者dll)相关的依赖项(动态链接库dll),以及该exe或dll引用了这些dll中的哪些接口,同时也可以看到每个被依赖的dll中的所有导出的函数接口. ...

  6. Android市场官方的统计信息

    做Android应用和游戏,避免不了的要了解市面上的各种android设备的信息,以最大程度的兼容更多的设备. Android市场会定期发布统计信息,包括SDK版本,屏幕大小和分辨率,OpenGL E ...

  7. 对springMVC的简单理解

    spring框架以及MVC思想: 一:spring框架:spring框架是一种很优秀的框架,它可以帮助开发人员简化组件与组件之间耦合,管理对象.1:创建对象和管理对象之间的关系,可以在配置文件通过be ...

  8. CentOS7.0下载各版本说明 新增Everything版

    来源:http://www.centoscn.com/CentOS/2014/0708/3268.html 下载CentOS-7.0-1406的时候,有很多可选则的版本,对于初学者来说,不知道选择哪个 ...

  9. 一致性Hash算法及使用场景

    一.问题产生背景      在使用分布式对数据进行存储时,经常会碰到需要新增节点来满足业务快速增长的需求.然而在新增节点时,如果处理不善会导致所有的数据重新分片,这对于某些系统来说可能是灾难性的. 那 ...

  10. centos vim 中文乱码解决方案

    1.安装中文包:yum -y groupinstall chinese-support   2.修改字符编码配置文件 vi /etc/sysconfig/i18n LANGUAGE="zh_ ...