c++;程序无法正确编译 我对C++ MaFrice非常新。最近,我尝试重新实现本文介绍的密集轨迹算法:

c++;程序无法正确编译 我对C++ MaFrice非常新。最近,我尝试重新实现本文介绍的密集轨迹算法:,c++,opencv,makefile,ffmpeg,C++,Opencv,Makefile,Ffmpeg,然而,我一直在为他们提供的Makefile而挣扎。生成文件如下所示: # set the binaries that have to be built TARGETS := DenseTrack Video # set the build configuration set BUILD := release #BUILD := debug # set bin and build dirs BUILDDIR := .build_$(BUILD) BINDIR := $(BUILD) # l

然而,我一直在为他们提供的Makefile而挣扎。生成文件如下所示:

# set the binaries that have to be built
TARGETS := DenseTrack Video

# set the build configuration set 
BUILD := release
#BUILD := debug

# set bin and build dirs
BUILDDIR := .build_$(BUILD)
BINDIR := $(BUILD)

# libraries 
LDLIBS = $(addprefix -l, $(LIBS) $(LIBS_$(notdir $*)))
LIBS := \
    opencv_core opencv_highgui opencv_video opencv_imgproc \
    avformat avdevice avutil avcodec swscale

# set some flags and compiler/linker specific commands
CXXFLAGS = -pipe -D __STDC_CONSTANT_MACROS -D STD=std -Wall $(CXXFLAGS_$(BUILD)) -I. -I/usr/local/include -I/home/wei/ffmpeg_build/include
CXXFLAGS_debug := -ggdb
CXXFLAGS_release := -O3 -DNDEBUG -ggdb
LDFLAGS = -L/usr/local/lib -L/home/wei/ffmpeg_build/lib -pipe -Wall $(LDFLAGS_$(BUILD))
LDFLAGS_debug := -ggdb
LDFLAGS_release := -O3 -ggdb

include make/generic.mk
通过使用这两个库运行一个示例,我可以验证我的opencv2.4.2和ffmpeg5.4.0是否成功安装在Ubuntu 16.04中

对于opencv: 库路径为:/usr/local/lib

libavcodec.a                   libopencv_gpu.so.2.4   
    libopencv_photo.so.2.4
libavdevice.a                  libopencv_gpu.so.2.4.2        libopencv_photo.so.2.4.2
libavfilter.a                  libopencv_highgui.so          libopencv_stitching.so
libavformat.a                  libopencv_highgui.so.2.4      libopencv_stitching.so.2.4
libavutil.a                    libopencv_highgui.so.2.4.2    libopencv_stitching.so.2.4.2
libopencv_calib3d.so           libopencv_imgproc.so          libopencv_ts.so
libopencv_calib3d.so.2.4       libopencv_imgproc.so.2.4      libopencv_ts.so.2.4
libopencv_calib3d.so.2.4.2     libopencv_imgproc.so.2.4.2    libopencv_ts.so.2.4.2
libopencv_contrib.so           libopencv_legacy.so           libopencv_video.so
libopencv_contrib.so.2.4       libopencv_legacy.so.2.4       libopencv_video.so.2.4
libopencv_contrib.so.2.4.2     libopencv_legacy.so.2.4.2     libopencv_video.so.2.4.2
libopencv_core.so              libopencv_ml.so               libopencv_videostab.so
libopencv_core.so.2.4          libopencv_ml.so.2.4           libopencv_videostab.so.2.4
libopencv_core.so.2.4.2        libopencv_ml.so.2.4.2         libopencv_videostab.so.2.4.2
libopencv_features2d.so        libopencv_nonfree.so          libpostproc.a
libopencv_features2d.so.2.4    libopencv_nonfree.so.2.4      libswresample.a
libopencv_features2d.so.2.4.2  libopencv_nonfree.so.2.4.2    libswscale.a
libopencv_flann.so             libopencv_objdetect.so        pkgconfig
libopencv_flann.so.2.4         libopencv_objdetect.so.2.4    python2.7
libopencv_flann.so.2.4.2       libopencv_objdetect.so.2.4.2  python3.5
libopencv_gpu.so               libopencv_photo.so
包含路径为:usr/local/include:

libavcodec   libavfilter  libavutil    libswresample  opencv
libavdevice  libavformat  libpostproc  libswscale     opencv2
对于ffmpeg: lib路径为:/home/user/ffmpeg\u build/lib

libavcodec.a   libavfilter.a  libavutil.a   libfdk-aac.la  libswresample.a  libx265.a
libavdevice.a  libavformat.a  libfdk-aac.a  libpostproc.a  libswscale.a     pkgconfig
包含路径为:/home/user/ffmpeg/include

fdk-aac     libavdevice  libavformat  libpostproc    libswscale     x265.h
libavcodec  libavfilter  libavutil    libswresample  x265_config.h
因此,当我使用Makefile创建它时,我没有得到错误,但链接似乎工作正常,编译后的输出也不正常

我试图用g++命令直接编译

sudo g++ -o Video -pipe -D __STDC_CONSTANT_MACROS -D STD=std -Wall -I. -I/usr/local/include -O3 -DNDEBUG -ggdb -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc -lavformat -lavdevice -lavutil -lavcodec -lswscale *.h Video.cpp
但是,它返回的错误如下:

/tmp/ccjYmwI4.o: In function `main':
/home/wei/Documents/dt/dense_trajectory_release_v1.2/Video.cpp:33: undefined reference to `cvCreateFileCapture'
/home/wei/Documents/dt/dense_trajectory_release_v1.2/Video.cpp:48: undefined reference to `cvQueryFrame'
/home/wei/Documents/dt/dense_trajectory_release_v1.2/Video.cpp:57: undefined reference to `cvCopy'
/home/wei/Documents/dt/dense_trajectory_release_v1.2/Video.cpp:60: undefined reference to `cvShowImage'
/home/wei/Documents/dt/dense_trajectory_release_v1.2/Video.cpp:61: undefined reference to `cvWaitKey'
/home/wei/Documents/dt/dense_trajectory_release_v1.2/Video.cpp:53: undefined reference to `cvCreateImage'
/home/wei/Documents/dt/dense_trajectory_release_v1.2/Video.cpp:70: undefined reference to `cvDestroyWindow'
/home/wei/Documents/dt/dense_trajectory_release_v1.2/Video.cpp:41: undefined reference to `cvNamedWindow'
collect2: error: ld returned 1 exit status
我研究这个问题已经好几天了。任何帮助或建议都将不胜感激


谢谢

问题来自您的链接器呼叫:

库选项(
-l
)必须位于要编译或链接的代码之后:

正确:

 # code in foo.cpp need function in libmylib.so
 g++ foo.cpp -lmylib

 # code in foo.o need function in libmylib.so
 g++ foo.o -lmylib
不正确:

 # code in foo.cpp need function in libmylib.so
 g++ -lmylib foo.cpp 

 # code in foo.o need function in libmylib.so
 g++ -lmylib foo.o

试着用
g++Video.cpp-o Video-pipe-D\u STDC\u CONSTANT\u MACROS-D STD=STD-Wall-I-I/usr/local/include-O3-DNDEBUG-ggdb-L/usr/local/lib-lopencv\u core-lopencv\u highgui-lopencv-lopencv\u Video-lopencv\u imgproc-lavformat-lavdevevevice-lavutil-lavcodec-lscale进行测试。谢谢!问题是你说了什么。但是在我有了一个可执行文件Video之后,我尝试实现一个示例,如:./Video.avi。它说(视频:31629):GLib GObject CRITICAL**:g_object_set:断言“g_IS_object(object)”失败无法初始化捕获。。你知道那是什么意思吗?“你知道吗…”不,请随便问一个新问题。谢谢你的帮助!