学习Linux/GNU/C++/C过程中遇到的问题

  1. 1.源函数调用:

        c++文件调用另一个cpp文件:函数声明在libtest.h中,函数定义在libtest.cpp中,则test.cpp调用libtest.h中声明的函数时,使用#include "libtest.cpp"而不是“libtest.h”,否则出现函数未调用。c++调用c文件则include xxx.h头文件。

2.linux静态库使用:

        g++ -c libtest.cpp -o libtest.o编译源文件为目标文件.o

        ar rcs libtest.a libtest.o由.o目标文件生成静态库

        g++ test.cpp -o test -static -L.编译test.cpp,在test.cpp中include"libtest.cpp",-static指示使用静态链接,-L.指示在当前文件夹查找所需库文件,在-L.后加上 -lerr则便是在当前命令下查找库文件liberr,可使用file test查看是否成功静态链接

        运行./test可执行文件

3.vscode创建c++程序调用onnxruntime:

        (1)问题:找不到头文件或者未定义函数

               解决:在task.json文件的args部分加上:

                "-I/tao/code/package/onnxruntime/include",//大写I表示include目录
                "-L/tao/code/package/onnxruntime/lib",//大写L表示.so共享库目录
                "-lonnxruntime",//小写l为lib库名称,库目录中文件全名为libonnxruntime.so,这里用l来表示lib

                最后:注意task或c_cpp_properties.json中编译器命令是否为g++,不用gcc;

        (2)问题error while loading shared libraries: libonnxruntime.so.1.16.1: cannot open shared object file: No such file or directory

        解决:tasks.json内指定库目录即名称任然报错,因为默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定–prefix,提示找不到相关的.so库,会报错。也就是说,.so文件目录不在系统默认的库搜索目录中,需要将目录加进去。
配置文件在:/etc/ld.so.conf文件中,将所在的库目录加入到共享库的配置文件中:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加/tao/code/package/onnxruntime/lib。保存后,在命令行终端执行:/sbin/ldconfig -v和ldconfig,其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。

你可能感兴趣的:(学习,c++,开发语言)