C++笔记(9)- g++ 编译c++程序注意事项

使用动态库的方式编译程序

  1. 创建一个hello_slam.cpp文件,将需要实现的功能放在这个文件中

    #include <iostream>
    #include "print_slam.h"   // 后续创建库文件的头文件时使用的  
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
        print_slam();
        return 0;
    }
    
  2. 生成一个库文件的print_slam.cpp文件,用于后续编译成动态库使用

    #include <iostream>
    using namespace std;
    
    void print_slam()
    {
        cout << "HELLO SLAM!!" << endl;
    }
    
  3. 生成一个库文件的print_slam.h文件,用于后续调用动态库时使用的头文件

    #ifndef PRINT_SLAM_H_
    #define PRINT_SLAM_H_
    
    void print_slam();
    
    #endif
    
  4. 创建一个动态库文件libprint_slam.so(注意动态库在命名的时候需要注意规则,名字需要一lib开头,这样后期编译的时候才能找到库文件

    g++ -shared -fPIC print_slam.cpp -o libprint_slam.so
    
  5. 更新环境变量,将当前程序所在目录添加到环境变量中,这样在执行程序的时候才能找到动态库的位置

     export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH 
    
  6. 生成可执行文件,这时候需要使用到几个参数 (-L -l(小写的L,后面需要跟上动态库的名字,这时候不需要将lib打上,只需要lib后面的名字即可)

    g++ hello_slam.cpp -o hello -L . -l print_slam
    

    ==NOTE:==通过L参数指定库文件的地址;-l(小写的L)指定动态库的名字;

  7. 执行可执行文件

    ./hello  
    

    如果之前没有导入环境变量的话,这里直接执行是会报错的,上面讲的导入环境变量的方法只限于在同一个终端使用,如果再开一个终端的话 还需要重新导入一次环境变量,只在当前shell中起作用

    ./hello: error while loading shared libraries: libprint_slam.so: cannot open shared object file: No such file or director
    

导入环境变量的几种方法

方法一: export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是登出后就失效

方法二: 修改~/bashrc~/.bash_profile或系统级别的/etc/profile

加粗样式举例:修改~/.bashrc的方法
通过使用在.bashrc文件中添加环境变量,并source(相当于将更改后的设置文件重新启动一下,不需要重新登录系统就可生效)之后,就不用每次打开新的终端执行可执行文件的时候都需要添加环境变量了

export LD_LIBRARY_PATH=~/slam_learning/ch2/ch2_test:$LD_LIBRARY_PATH    

NOTE:$符号之间没有空格,添加空格的话 就会发现没添加上正确的路径

方法三:这个没有修改LD_LIBRARY_PATH但是效果是一样的实现动态库的查找(试验了一下没有成功

  1. /etc/ld.so.conf下面加一行/usr/local/mysql/lib

  2. 保存过后ldconfig一下(ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.)

方法三设置稍微麻烦,好处是比较不受用户的限制。

参考文章

linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)

GCC/G++编译器中指定库文件(LIB)、头文件(INCLUDE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值