微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有makefile的EXIV2

如何解决带有makefile的EXIV2

我需要使用Makefile在我的项目中包括exiv2扩展名。 我成功通过以下命令直接通过终端运行它:

g++ -std=c++11 test.cpp -I/usr/local/include -L/usr/local/lib -lexiv2

我原来的Makefile(有效)重要部分:

COMPILER_FLAGS      =   -Wall -c -O2 -std=c++11 -fpic -o
LINKER_FLAGS        =   -shared
LINKER_DEPENDENCIES =   -lPHPcpp -lopencv_core -lopencv_imgproc -lopencv_highgui \
                        -lopencv_ml -lopencv_video -lopencv_features2d \
                        -lopencv_calib3d -lopencv_objdetect \

现在,我必须运行将exiv2与Makefile结合使用的程序。 现在,我正在尝试自定义Makefile,尝试过

COMPILER_FLAGS      =   -Wall -c -O2 -std=c++11 -I/usr/local/include -L/usr/local/lib -fpic -o
LINKER_FLAGS        =   -shared
LINKER_DEPENDENCIES =   -lPHPcpp -lopencv_core -lopencv_imgproc -lopencv_highgui \
                        -lopencv_ml -lopencv_video -lopencv_features2d \
                        -lopencv_calib3d -lopencv_objdetect \
                        -lexiv2 \

不起作用,make的输出为:

[root@localhost psdk4]# make
g++ -Wall -c -O2 -std=c++11 -I/usr/local/include -L/usr/local/lib -fpic -o Metacopy.o Metacopy.cpp
Metacopy.cpp: In member function ‘int Params::copyMetadata(int,char**)’:
Metacopy.cpp:50:9: error: ‘Autoptr’ is not a member of ‘exiv2::BasicIo’
         exiv2::BasicIo::Autoptr fileIo(new exiv2::FileIo(params.read_));
         ^
Metacopy.cpp:50:33: error: expected ‘;’ before ‘fileIo’
         exiv2::BasicIo::Autoptr fileIo(new exiv2::FileIo(params.read_));

...

这意味着它找不到exiv2方法,如何自定义我的Makefile?

解决方法

AutoPtr(是std::auto_ptr的别名)已于2018年12月从Exiv2中删除。请注意,std::auto_ptr本身已于2011年从C ++中弃用,并于2017年全部删除。>

Relevant Diff on Github

您依赖AutoPtr的代码太旧了。您可以通过将AutoPtr替换为UniquePtr来更新它。您将必须找到所有复制前auto_ptr的地方(已分配,传递给函数等),并在复制源周围插入对std::move的调用。编译器会抱怨删除了函数(复制构造函数或复制赋值),因此很容易一个接一个地修复这些地方。例如:

 AutoPtr some_variable = ...;
 ...
 some_function(some_variable);

需要成为

 UniquePtr some_variable = ...;
 ...
 some_function(std::move(some_variable));
,

这有效:

readImg = Exiv2::ImageFactory::open(std::move(memIo));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。