首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有makefile的Exiv2

带有makefile的Exiv2
EN

Stack Overflow用户
提问于 2020-08-19 19:04:53
回答 2查看 82关注 0票数 0

我需要使用Makefile在我的项目中包含我的Exiv2扩展。我成功地通过终端直接运行它:

代码语言:javascript
复制
g++ -std=c++11 test.cpp -I/usr/local/include -L/usr/local/lib -lexiv2

我最初的Makefile (它可以工作)的重要部分:

代码语言:javascript
复制
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 \

现在我必须运行一个使用带有Makefile的Exiv2的程序。现在,我正在尝试定制Makefile,尝试

代码语言:javascript
复制
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的输出是:

代码语言:javascript
复制
[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?

EN

回答 2

Stack Overflow用户

发布于 2020-08-19 20:46:16

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

Relevant Diff on Github

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

代码语言:javascript
复制
 AutoPtr some_variable = ...;
 ...
 some_function(some_variable);

需要成为

代码语言:javascript
复制
 UniquePtr some_variable = ...;
 ...
 some_function(std::move(some_variable));
票数 0
EN

Stack Overflow用户

发布于 2020-08-19 22:59:06

这是可行的:

代码语言:javascript
复制
readImg = Exiv2::ImageFactory::open(std::move(memIo));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63485618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档