zoukankan      html  css  js  c++  java
  • C++新库安装过程

    C++新库安装过程

    Configure

    Configure文件:是一个sh脚本文件,这一步一般是检查当前系统的依赖环境问题,最后生成对应的Makefile文件,一般会在结尾跟上安装的目录(默认在/usr/local下)
    --prefix: 自定义安装的目录
    -exec-prefix=EPREFIX: 依赖库的目录,如果不指定,将默认为prefix中指定的目录

    ./Configure --prefix=/tmp/usr/local/

    make

    按照上述生成的Makefile来编译新库,编译新库时依赖的其他静态库和动态库在这一步完成。

    make

    make install

    生成新库的头文件以及动态库与静态库,头文件放在/usr/local/include中,静态库和动态库放在/usr/local/lib中,.a或者.so,以备使用。由于涉及到写文件,所以需要sudo权限。

    sudo make install

    将新建的库作为一个独立的模块进行使用

    当使用一个第三方依赖库的时候,我们可以将第三方库的.h和.a、.so当做一个文件夹放在项目目录下,在项目的Makefile中写出依赖的头文件路径和库文件路径

    INCLUDES:= -I. -I./third_party/include

    LDFLAGS:= -Wl,-rpath,/third_party/lib,-rpath,/lib/,-rpath,/usr/lib/,-rpath,/usr/local/lib

    $(EXECUTABLE): $(ALL_OBJECTS)
          $(CC) $(ALL_OBJECTS) -o $@ $(LDFLAGS)  //  ALL_OBJECTS是其他依赖库的.o文件
    %.o: %.cpp
          $(CC) $(CFLAGS) $(INCLUDES) $< -o $@   // CFLAGS是一系列的c的配置,如 std=c++11这种
    

    note: ./third_party/include和./third_party/lib都尽量包含进去,如若只包含前者忽略后者,编译不会报错误,但是加载动态库运行的时候,会报找不到动态库的错误(可以使用ldd [execute_file]命令查看)。动态链接时,linux共享库链接器ld.so来链接动态库,ld.so寻找动态库的顺序如下:

    • ELF可执行文件中动态段中DT_RPATH所指定的路径。即在编译目标代码时, 对gcc加入链接参数“-Wl,-rpath”指定动态库搜索路径

    gcc -Wl,-rpath,/home/arc/test,-rpath,/lib/,-rpath,/usr/lib/,-rpath,/usr/local/lib test.c

    • 环境变量LD_LIBRARY_PATH 指定的动态库搜索路径

    export LD_LIBRARY_PATH=/tmp/local/lib/

    • /etc/ld.so.cache中所缓存的动态库路径,这个可以通过先修改配置文件/etc/ld.so.conf中指定的动态库搜索路径,然后执行ldconfig命令来改变。
    • 默认的动态库搜索路径/lib、/usr/lib、/usr/local/lib。

    安装新库过程
    动态库链接问题

  • 相关阅读:
    TPLINK GPL code 简要分析
    Openwrt 初探
    物联网-手机远程控制家里的摄像头(3)
    物联网-手机远程控制家里的摄像头(2)
    lumia 520无法开机
    树莓派无法驱动移动硬盘
    Cannot Change Opencv Webcam Setting
    IIC协议理解(转)
    应用调试(六)记录回放输入子系统
    应用调试(五)侵入式SWI
  • 原文地址:https://www.cnblogs.com/wangzi199/p/13455165.html
Copyright © 2011-2022 走看看