我需要使用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 \现在我必须运行一个使用带有Makefile的Exiv2的程序。现在,我正在尝试定制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?
发布于 2020-08-19 20:46:16
AutoPtr (std::auto_ptr的别名)于2018年12月从Exiv2中删除。请注意,C++在2011年弃用了std::auto_ptr本身,并在2017年完全删除了它。
您的依赖于AutoPtr的代码太旧。您也许可以通过用UniquePtr替换AutoPtr来更新它。您必须找到复制前一个auto_ptr的所有位置(赋值、传递给函数等),并在复制源周围插入对std::move的调用。编译器会抱怨被删除的函数(复制构造函数或复制赋值),因此很容易逐个修复这些地方。例如:
AutoPtr some_variable = ...;
...
some_function(some_variable);需要成为
UniquePtr some_variable = ...;
...
some_function(std::move(some_variable));发布于 2020-08-19 22:59:06
这是可行的:
readImg = Exiv2::ImageFactory::open(std::move(memIo));https://stackoverflow.com/questions/63485618
复制相似问题