编译篇

较大型cpp项目的代码组织、编译都是深耦合的。

一般提供一个总体的makefile,进入各个模块,又有自己的makefile,这些makefile又都依赖于一些被include的文件的的定义,为什么要这样原因不必多言。

但要想改变编译环境时,却很难顺利的移植。我们可能踩过的坑有:

1)找不到类库,这个还比较好处理,绝对是你指定的目录问题,甚至是当前目录——一个小圆点不要疏忽了

2)依赖库不匹配,比如glibc、i686、x86_64等,只管去匹配好了

3)还是找不到定义:  注意调整依赖的顺序,一般越是通用、没有耦合的库要尽可能放在后面,让前面找不到定义的库有机会去查找,还有就是双向关联的类——做好声明。

如何定位一些原因,必须学会如下命令:

  • ldd -r
  • strings | grep [...]
  • file 或者 objdump -a
  • nm --demangle
  • readelf -s [YOURBINNAME]
  • objectdump -a *.a
  • strings *.so | grep [...]

搞清楚各个库的版本,尤其是libc的

可以用(ldd --version 查看glibc的版本,如ldd (GNU libc) 2.12; 命令/lib64/libc.so.6也可以)

这里再补充些网上找来的资源:

编译源代码时,链接的时候查找顺序是:
(1) -L 指定的路径, 从左到右依次查找
(2) 由环境变量 LIBRARY_PATH 指定的路径,使用":"分割从左到右依次查找
(3) /etc/ld.so.conf 指定的路径顺序
(4)  /lib 和 /usr/lib (64位下是/lib64和/usr/lib64)

动态库调用的查找顺序:
(1) ld的-rpath参数指定的路径, 这是写死在代码中的
(2) ld脚本指定的路径
(3) LD_LIBRARY_PATH 指定的路径
(4) /etc/ld.so.conf 指定的路径
(5)/lib和/usr/lib(64位下是/lib64和/usr/lib64)

一般情况链接的时候我们采用-L的方式指定查找路径, 调用动态链接库的时候采用LD_LIBRARY_PATH的方式指定链接路径。

另外注意一个问题,就是只要查找到第一个就会返回,后面的不会再查找.

makefile中对操作系统的判断:

ARCH = $(shell getconf LONG_BIT)

uname -m

ifeq ($(OS_TYPE), x86_64) LIB_EPOLL =

else LIB_EPOLL = -lepoll

endif

待续

cpp项目的组织的更多相关文章

  1. PBO项目的组织

    前言: 最近发现PMI的英文官网已经公布了第五版PMBOK的初稿,针对第四版而言的确有了不少变动.了解这些变动,对理解项目管理知识的整理和发展,以及掌握PMP考试的变化方向都是很重要的.当然,变动尤其 ...

  2. 161010、在大型项目中组织CSS

    编写CSS容易. 编写可维护的CSS难. 这句话你之前可能听过100次了. 原因是CSS中的一切都默认为全局的.如果你是一个C程序员你就知道全局变量不好.如果你是任何一种程序员,你都知道隔离和可组合的 ...

  3. 160901、在大型项目中组织CSS

    编写CSS容易. 编写可维护的CSS难. 这句话你之前可能听过100次了. 原因是CSS中的一切都默认为全局的.如果你是一个C程序员你就知道全局变量不好.如果你是任何一种程序员,你都知道隔离和可组合的 ...

  4. 拥抱PBO(基于项目的组织)聚焦核心价值创造

    近年来.PBO(Project-Based Organizations)作为一种新兴的整合各类专业智力资源和专业知识的组织结构,受到越来越多的关注,第五版PMBOK出现的新词汇.三种组织(职能型.矩阵 ...

  5. iOS 项目代码组织

    参考了很多系列,发现老外们都比较喜欢 group by type,这两个还不错: http://akosma.com/2009/07/28/code-organization-in-xcode-pro ...

  6. 2019/12/5BJFirstDay--scrum后台+cpp项目前台环境跑起来!!!

    1.配置服务器: 2.进入cd C:\java\25.beijing\06.vuejs\cpp201911221829\cpp 3.运行的命令是:npm run dev 4.先启动 5.然后再启动cp ...

  7. PMP 第二章 项目生命周期与组织

    1 项目组织机构类型有哪些? 区别是什么? 职能型  矩阵型  项目性 2 什么是事业环境因素? 什么是组织过程资产? 如何区分事业环境因素和组织过程资产? 事业环境因素:事业环境因素指围绕项目或能影 ...

  8. 《Visual C++ 2010入门教程》系列五:合理组织项目、使用外部工具让工作更有效

    原文:http://www.cnblogs.com/Mrt-02/archive/2011/07/24/2115631.html 这一章跟大家分享一些与c++项目管理.VAX.SVN.VS快捷键等方面 ...

  9. web手工项目01-系统组织框架-测试流程-需求评审-测试计划与方案

    回顾 SVN(定义,作用,使用操作) 软件缺陷(定义,表现形式,原因和根源,基本内容,跟踪流程) JIRA(基本介绍,使用者,工作流,问题,使用) 学习目标 掌握WAMP的环境搭建 掌握熟悉项目的步骤 ...

随机推荐

  1. c语言函数指针

    #include <stdio.h> typedef void (*intFunc)(int i); void test1(int age) { printf("test1:%d ...

  2. 例子:Bluetooth app to device sample

    本例子演示了: 判断蓝牙是否打开,是通过一个HRsult值为0x8007048F的异常来判断的 catch (Exception ex) { if ((uint)ex.HResult == 0x800 ...

  3. C++之虚函数和多态

    干货较多-需要自己深思理解: C++支持两种多态性: 1.编译时多态性(静态绑定-早绑定) 在程序编译阶段即可以确定下来的多态性 通过使用 重载机制(重载函数)实现 (模板)http://blog.c ...

  4. yum源的搭建

    1.光盘的挂载 2.先创建一个文件 /aaa 然后挂载mount /dev/cdrom /aaa 进入 /aaa   ls 查看是否挂载OK 3.进入yum文件夹.将除Media以外的所有文件名改为X ...

  5. MySQL 通过semi join 优化子查询

    半连接是MySQL 5.6.5引入的,多在子查询exists中使用,对外部row source的每个键值,查找到内部row source匹配的第一个键值后就返回,如果找到就不用再查找内部row sou ...

  6. iOS中AutoLayer自动布局流程及相关方法

    关于UIView的Layer,IOS提供了三个方法: 1.layoutSubviews 在iOS5.1和之前的版本,此方法的缺省实现不会做任何事情(实现为空),iOS5.1之后(iOS6开始)的版本, ...

  7. Ubuntu 16.04 软件中心闪退 解决方案

    最近使用16.04不知道是哪里出了问题,软件中心打不开了,点击图标之后完全不显示GUI,过一会儿软件就自动关闭了,然后也没有报错的log. 虽然可以使用命令行升级,但是强迫症不能忍啊. 经过一番折腾, ...

  8. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper    我下的是 里面包含了搭建PHP必须的4个软件:   1. ...

  9. Win10/UWP开发—SystemNavigationManager

    Win10系统为确保所有应用中的一致导航体验,提供后退导航功能.当你的应用在手机.平板电脑上或者在支持系统后退功能的电脑或笔记本电脑上运行时,系统会在"后退"按钮被按下时通知你的应 ...

  10. Tomcat启动超过45S

    Timeout waiting for Tomcat v5.5&nbspServer @localhost  to start. Server did not start after 45s ...