我正在尝试修改和编译Raspberry Pi上的uvccapture。我得到了源from here(它只是几个文件)。
(我认为)它所需的唯一外部文件是我从here下载的jpeglib
的文件。
编译时,我在哪里放置jpeglib源文件? UVCCapture有以下几行:
#include <jpeglib.h>
这是否意味着我应该将jpeglib源文件放在与UVCCapture源文件相同的目录中?这看起来很混乱。如何设置编译器(修改Makefile?),我应该在哪里放置jpeglib文件,以便我不需要更改uvccapture包含文件行?
还有一个问题,为什么它只包含.h文件而不包含.c文件? (我对C / C ++很陌生)
这是Makefile:
CC=gcc
CPP=g++
APP_BINARY=uvccapture
VERSION = 0.4
PREFIX=/usr/local/bin
WARNINGS = -Wall
CFLAGS = -std=gnu99 -O2 -DLINUX -DVERSION=\"$(VERSION)\" $(WARNINGS)
CPPFLAGS = $(CFLAGS)
OBJECTS= uvccapture.o v4l2uvc.o
all: uvccapture
clean:
@echo "Cleaning up directory."
rm -f *.a *.o $(APP_BINARY) core *~ log errlog
install:
install $(APP_BINARY) $(PREFIX)
# Applications:
uvccapture: $(OBJECTS)
$(CC) $(OBJECTS) $(XPM_LIB) $(MATH_LIB) -ljpeg -o $(APP_BINARY)
由于
答案 0 :(得分:3)
源文件(uvccapture.c
)并不关心头文件(jpeglib.h
)的位置 - 至少它不应该。必须告诉编译器在哪里查找头文件;传统上,头文件放在某些目录中,如inc_files/
,并使用类似
gcc -blah -blah -blah -Iinc_files -c -o uvccapture.o uvccapture.c
如果你使用Make,那么Make应该执行这样的命令。因此,要么编辑makefile,要么将头文件放在当前目录中。
在C / C ++中使用#include
的合理方法是让源文件和头文件包含头文件。也就是说,在foo.c
中会有几行,如:
#include <bar>
#include "baz.h"
并且在baz.h
中可能会有以下几行:
#include <vector>
#include "qux.h"
你几乎从未见过#include foo.c
,因为它几乎不是一个好主意。