AR学习笔记:Exiv2库的编译

Posted Sakurazzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AR学习笔记:Exiv2库的编译相关的知识,希望对你有一定的参考价值。

课题需要使用到exiv2的库,这里记录一下编译过程中遇到的问题


exiv2

官方文档:https://www.exiv2.org/
下了官网的软件包,还在研究软件包的说明,看看怎么安装…

(正确的食用方法)Build, Install, Use Exiv2 on a UNIX-like system

下载软件包:https://www.exiv2.org/download.html
点击Download Source下载的包是对的,看一下README.md的2.1节

$ cd ~/gnu/github/exiv2  # location of the project code
$ mkdir build && cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ cmake --build .
$ make tests
$ sudo make install

安装完成!

(错误方式)To run exiv2 from the bundle

下面这一小节是我犯蠢了,下错了软件包,还把系统搞崩了一次,直接跳过

$ cd <bundle>
$ env LD_LIBRARY_PATH="$PWD/lib:$LD_LIBRARY_PATH" bin/exiv2

第一段标题是从软件包中启动exiv2,其中env用于列出所有的环境变量,LD_LIBRARY_PATH是程序链接时的路径
出现了以下报错:

zzy@zzy-hp:~/exiv2-0.27.4-Linux64$ env LD_LIBRARY_PATH="$PWD/lib:$LD_LIBRARY_PATH" bin/exiv2
bin/exiv2: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by bin/exiv2)
bin/exiv2: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /home/zzy/exiv2-0.27.4-Linux64/lib/libexiv2.so.27)
bin/exiv2: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /home/zzy/exiv2-0.27.4-Linux64/lib/libexiv2.so.27)

看起来是缺少了GLIBCXX_3.4.26/GLIBC_2.29这两个东西

1.先解决一下GLIBCXX_3.4.26这个链接库

因为安装的gcc版本比较高,生成的动态库没有替换老版本gcc的动态库,GLIBCXX中的版本比较低,将gcc最新版本的动态库替换系统中老版本的动态库即可

找到了一个帖子解决了缺少GLIBCXX_3.4.26的问题:https://blog.csdn.net/phdsky/article/details/84104769
重新链接的过程如下:

2.接下来处理GLIBC_2.29这个东西

warning!!!不要按上面的方法cp文件!!我cp了一份系统直接崩溃了,我裂开,只能重装系统了


遇到的问题

1.未定义的引用

编译程序时出现了如下报错
查了一下page应该是gcc编译器版本的问题

c++11与旧的c++库函数实现存在差异,当本地的c++代码动态库为旧版本c++库所实现,而编译器g++5,gcc5将其解释为std::__cxx11,就会出现未定义错误,那么需要指定编译器的版本为g++4,gcc4,再进行编译时就不会发生上述问题

解决:安装了4.8版本和5.5版本的gcc和g++,还是同样的问题,后来瞎搞系统崩溃了,重装后正确安装了exiv2库,用的gcc还是7.5.0版本的,没有了编译错误,因祸得福吧

2.std::ifstream reader 不完整的类型

编译又出现了一个问题

/home/zzy/epnp_test/epnp.cpp:150:20: error: variable ‘std::ifstream reader’ has initializer but incomplete type
     ifstream reader("zuobiao-huawei.txt");

解决:少包含了一个库fstream
详细博客:https://blog.csdn.net/allenlinrui/article/details/19639241

编译通过!

以上是关于AR学习笔记:Exiv2库的编译的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记 链接

c#学习笔记02----自定义类库及反编译

Rust学习笔记02:利用命令创建编译和运行项目

C语言学习笔记--动态库和静态库的使用

学习笔记:python3,代码片段(2017)

FI学习笔记AR部分快速IMG配置