如何解决带有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年全部删除。>
您依赖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 举报,一经查实,本站将立刻删除。