[英]Build through Makefile and build script works but with equivalent Makefile.am doesnt.(Gives undefined reference errors)
I'm trying to convert the build mechanism of ccextractor (Open source closed caption extractor) from custom Makefile to Autotools generated Makefile. 我正在尝试将ccextractor(开源隐藏式字幕提取器)的构建机制从自定义Makefile转换为Autotools生成的Makefile。
Supplied Makefile looks like this: 提供的Makefile如下所示:
SHELL = /bin/sh
CC = gcc
SYS := $(shell gcc -dumpmachine)
CFLAGS = -O3 -std=gnu99 -s
INCLUDE = -Isrc/gpacmp4/ -Isrc/libpng -Isrc/lib_hash -Isrc/protobuf-c -Isrc/zlib -Isrc/lib_ccx -Isrc/.
INCLUDE += -Isrc/zvbi -Isrc/utf8proc
ALL_FLAGS = -Wno-write-strings -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT
LDFLAGS = -lm
ifneq (, $(findstring linux, $(SYS)))
CFLAGS +=-DGPAC_CONFIG_LINUX
endif
TARGET = ccextractor
OBJS_DIR = objs
VPATH = src:src/gpacmp4:src/libpng:src/zlib:src/lib_ccx:src/zvbi:src/lib_hash:src/utf8proc:src/protobuf-c
SRCS_DIR = src
SRCS_C = $(wildcard $(SRCS_DIR)/*.c)
OBJS = $(SRCS_C:$(SRCS_DIR)/%.c=$(OBJS_DIR)/%.o)
SRCS_CCX_DIR = $(SRCS_DIR)/lib_ccx
SRCS_CCX = $(wildcard $(SRCS_CCX_DIR)/*.c)
OBJS_CCX = $(SRCS_CCX:$(SRCS_CCX_DIR)/%.c=$(OBJS_DIR)/%.o)
SRCS_PNG_DIR = $(SRCS_DIR)/libpng
SRCS_PNG = $(wildcard $(SRCS_PNG_DIR)/*.c)
OBJS_PNG = $(SRCS_PNG:$(SRCS_PNG_DIR)/%.c=$(OBJS_DIR)/%.o)
SRCS_ZVBI_DIR = $(SRCS_DIR)/zvbi
SRCS_ZVBI = $(wildcard $(SRCS_ZVBI_DIR)/*.c)
OBJS_ZVBI = $(SRCS_ZVBI:$(SRCS_ZVBI_DIR)/%.c=$(OBJS_DIR)/%.o)
SRCS_GPACMP4_DIR = $(SRCS_DIR)/gpacmp4
SRCS_GPACMP4_C = $(wildcard $(SRCS_GPACMP4_DIR)/*.c)
SRCS_GPACMP4_CPP = $(wildcard $(SRCS_GPACMP4_DIR)/*.cpp)
OBJS_GPACMP4 = $(SRCS_GPACMP4_C:$(SRCS_GPACMP4_DIR)/%.c=$(OBJS_DIR)/%.o) \
$(SRCS_GPACMP4_CPP:$(SRCS_GPACMP4_DIR)/%.cpp=$(OBJS_DIR)/%.o)
SRCS_ZLIB_DIR = $(SRCS_DIR)/zlib
SRCS_ZLIB = $(wildcard $(SRCS_ZLIB_DIR)/*.c)
OBJS_ZLIB = $(SRCS_ZLIB:$(SRCS_ZLIB_DIR)/%.c=$(OBJS_DIR)/%.o)
SRCS_HASH_DIR = $(SRCS_DIR)/lib_hash
SRCS_HASH = $(wildcard $(SRCS_HASH_DIR)/*.c)
OBJS_HASH = $(SRCS_HASH:$(SRCS_HASH_DIR)/%.c=$(OBJS_DIR)/%.o)
SRCS_UTF8_DIR = $(SRCS_DIR)/utf8proc
SRCS_UTF8 = $(SRCS_UTF8_DIR)/utf8proc.c
OBJS_UTF8 = $(SRCS_UTF8:$(SRCS_UTF8_DIR)/%.c=$(OBJS_DIR)/%.o)
INSTLALL = cp -f -p
INSTLALL_PROGRAM = $(INSTLALL)
DESTDIR = /usr/bin
ifeq ($(ENABLE_HARDSUBX),yes)
ENABLE_OCR=yes
CFLAGS+=-DENABLE_HARDSUBX
CFLAGS+= $(shell pkg-config --cflags libavcodec)
CFLAGS+= $(shell pkg-config --cflags libavformat)
CFLAGS+= $(shell pkg-config --cflags libavutil)
CFLAGS+= $(shell pkg-config --cflags libswscale)
AV_LDFLAGS+= $(shell pkg-config --libs libavcodec )
AV_LDFLAGS+= $(shell pkg-config --libs libavformat )
AV_LDFLAGS+= $(shell pkg-config --libs libavutil )
AV_LDFLAGS+= $(shell pkg-config --libs libswscale )
ifeq ($(AV_LDFLAGS),$(EMPTY))
$(error **ERROR** "libav not found")
else
$(info "libav found")
endif
LDFLAGS+= $(AV_LDFLAGS)
endif
ifeq ($(ENABLE_OCR),yes)
CFLAGS+=-DENABLE_OCR -DPNG_NO_CONFIG_H
LEPT_LDFLAGS+= $(shell pkg-config --libs lept)
ifneq ($(shell pkg-config --exists tesseract), $(EMPTY))
TESS_LDFLAGS+= $(shell pkg-config --libs tesseract)
TESS_CFLAGS+= $(shell pkg-config --cflags tesseract)
else
#fix for raspberry pi not having a pkgconfig file for tesseract
ifneq ($(wildcard /usr/include/tesseract/*),$(EMPTY))
TESS_LDFLAGS+= -ltesseract
TESS_CFLAGS+= -I/usr/include/tesseract
endif
endif
#error checking of library are there or not
ifeq ($(TESS_LDFLAGS),$(EMPTY))
$(error **ERROR** "tesseract not found")
else
#TODO print the version of library found
$(info "tesseract found")
endif
ifeq ($(LEPT_LDFLAGS),$(EMPTY))
$(error **ERROR** "leptonica not found")
else
#TODO print the version of library found
$(info "Leptonica found")
endif
CFLAGS += $(TESS_CFLAGS)
CFLAGS += $(shell pkg-config --cflags lept)
LDFLAGS += $(TESS_LDFLAGS)
LDFLAGS += $(LEPT_LDFLAGS)
endif
ifeq ($(ENABLE_FFMPEG),yes)
CFLAGS+=-DENABLE_FFMPEG
CFLAGS+= $(shell pkg-config --cflags libavcodec)
CFLAGS+= $(shell pkg-config --cflags libavformat)
CFLAGS+= $(shell pkg-config --cflags libavutil)
LDFLAGS+= $(shell pkg-config --libs libavcodec )
LDFLAGS+= $(shell pkg-config --libs libavformat )
LDFLAGS+= $(shell pkg-config --libs libavutil )
endif
.PHONY: all
all: pre-build objs_dir $(TARGET)
.PHONY: objs_dir
objs_dir:
mkdir -p $(OBJS_DIR)
$(TARGET): $(OBJS) $(OBJS_PNG) $(OBJS_GPACMP4) $(OBJS_ZVBI) $(OBJS_ZLIB) $(OBJS_HASH) $(OBJS_CCX) $(OBJS_UTF8)
$(CC) $(ALL_FLAGS) $(CFLAGS) $(OBJS) $(OBJS_CCX) $(OBJS_PNG) $(OBJS_ZVBI) $(OBJS_GPACMP4) $(OBJS_ZLIB) $(OBJS_HASH) $(OBJS_UTF8) $(LDFLAGS) -o $@
$(OBJS_DIR)/%.o: %.c
$(CC) -c $(ALL_FLAGS) $(INCLUDE) $(CFLAGS) $< -o $@
$(OBJS_DIR)/%.o: %.cpp
$(CC) -c $(ALL_FLAGS) $(INCLUDE) $(CFLAGS) $< -o $@ -Isrc/gpacmp4
$(OBJS_DIR)/ccextractor.o: ccextractor.c
$(CC) -c $(ALL_FLAGS) $(INCLUDE) $(CFLAGS) -O0 $< -o $@
.PHONY: clean
clean:
rm -rf $(TARGET) 2>/dev/null || true
rm -rf $(OBJS_CCX) $(OBJS_PNG) $(OBJS_ZLIB) $(OBJS_GPACMP4) $(OBJS_HASH) $(OBJS_UTF8) $(OBJS) 2>/dev/null || true
rm -rdf $(OBJS_DIR) 2>/dev/null || true
rm -rf .depend 2>/dev/null || true
.PHONY: install
install: $(TARGET)
$(INSTLALL_PROGRAM) $(TARGET) $(DESTDIR)
.PHONY: uninstall
uninstall:
rm -iv $(DESTDIR)/$(TARGET)
.PHONY: depend dep
depend dep:
$(CC) $(CFLAGS) $(INCLUDE) -E -MM $(SRCS_C) $(SRCS_PNG) $(SRCS_ZVBI) $(SRCS_ZLIB) $(SRCS_HASH) $(SRCS_UTF8) $(SRCS_CCX) \
$(SRCS_GPACMP4_C) $(SRCS_GPACMP4_CPP) |\
sed 's/^[a-zA-Z_0-9]*.o/$(OBJS_DIR)\/&/' > .depend
.PHONY: pre-build
pre-build:
./pre-build.sh
-include .depend
"ccextractor" is also built through a shell
script called build
“ ccextractor”也是通过称为
build
的shell
脚本build
The build
script which builds "ccextractor" perfectly fine is: 完美构建“ ccextractor”的
build
脚本为:
#!/bin/bash
BLD_FLAGS="-std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR"
BLD_INCLUDE="-Isrc -I /usr/include/leptonica/ -I /usr/include/tesseract/ -Isrc/lib_ccx/ -Isrc/gpacmp4/ -Isrc/libpng/ -Isrc/zlib/ -Isrc/zvbi -Isrc/lib_hash -Isrc/protobuf-c -Isrc/utf8proc"
SRC_LIBPNG="$(find src/libpng/ -name '*.c')"
SRC_ZLIB="$(find src/zlib/ -name '*.c')"
SRC_ZVBI="$(find src/zvbi/ -name '*.c')"
SRC_CCX="$(find src/lib_ccx/ -name '*.c')"
SRC_GPAC="$(find src/gpacmp4/ -name '*.c')"
SRC_HASH="$(find src/lib_hash/ -name '*.c')"
SRC_PROTOBUF="$(find src/protobuf-c/ -name '*.c')"
SRC_UTF8PROC="src/utf8proc/utf8proc.c"
BLD_SOURCES="src/ccextractor.c $SRC_CCX $SRC_GPAC $SRC_ZLIB $SRC_ZVBI $SRC_LIBPNG $SRC_HASH $SRC_PROTOBUF $SRC_UTF8PROC"
BLD_LINKER="-lm -zmuldefs -l tesseract -l lept"
.**Stripped a call for shell script that checks git commit (Nothing that would interfere with the build**
out=$((LC_ALL=C gcc $BLD_FLAGS $BLD_INCLUDE -o ccextractor $BLD_SOURCES $BLD_LINKER) 2>&1)
res=$?
if [[ $out == *"gcc: command not found"* ]]
then
echo "Error: please install gcc";
exit 1
fi
if [[ $out == *"curl.h: No such file or directory"* ]]
then
echo "Error: please install curl development library (libcurl4-gnutls-dev for Debian/Ubuntu)";
exit 2
fi
if [[ $out == *"capi.h: No such file or directory"* ]]
then
echo "Error: please install tesseract development library (tesseract-ocr-dev for Debian/Ubuntu)";
exit 3
fi
if [[ $out == *"allheaders.h: No such file or directory"* ]]
then
echo "Error: please install leptonica development library (libleptonica-dev for Debian/Ubuntu)";
exit 4
fi
if [[ $res -ne 0 ]] # Unknown error
then
echo "Compiled with errors"
>&2 echo "$out"
exit 5
fi
echo "Compilation successful";
Building through above Makefile
and build
script works fine. 通过以上
Makefile
和build
脚本进行build
可以正常工作。 My Makefile.am
looks like this: 我的
Makefile.am
看起来像这样:
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = ccextractor
ccextractor_SOURCES = \
src/ccextractor.c \
src/gpacmp4/avc_ext.c \
src/gpacmp4/avilib.c \
src/gpacmp4/av_parsers.c \
src/gpacmp4/base_encoding.c \
src/gpacmp4/bitstream.c \
src/gpacmp4/box_code_3gpp.c \
src/gpacmp4/box_code_adobe.c \
src/gpacmp4/box_code_apple.c \
src/gpacmp4/box_code_base.c \
src/gpacmp4/box_code_drm.c \
src/gpacmp4/box_code_meta.c \
src/gpacmp4/box_funcs.c \
src/gpacmp4/configfile.c \
src/gpacmp4/data_map.c \
src/gpacmp4/desc_private.c \
src/gpacmp4/descriptors.c \
src/gpacmp4/drm_sample.c \
src/gpacmp4/error.c \
src/gpacmp4/gpac/avparse.h \
src/gpacmp4/gpac/base_coding.h \
src/gpacmp4/gpac/bitstream.h \
src/gpacmp4/gpac/config_file.h \
src/gpacmp4/gpac/configuration.h \
src/gpacmp4/gpac/constants.h \
src/gpacmp4/gpac/events_constants.h \
src/gpacmp4/gpac/ietf.h \
src/gpacmp4/gpac/internal
src/gpacmp4/gpac/internal/avilib.h \
src/gpacmp4/gpac/internal/isomedia_dev.h \
src/gpacmp4/gpac/internal/media_dev.h \
src/gpacmp4/gpac/internal/odf_dev.h \
src/gpacmp4/gpac/internal/odf_parse_common.h \
src/gpacmp4/gpac/internal/ogg.h \
src/gpacmp4/gpac/isomedia.h \
src/gpacmp4/gpac/list.h \
src/gpacmp4/gpac/math.h \
src/gpacmp4/gpac/media_tools.h \
src/gpacmp4/gpac/mpeg4_odf.h \
src/gpacmp4/gpac/network.h \
src/gpacmp4/gpac/revision.h \
src/gpacmp4/gpac/setup.h \
src/gpacmp4/gpac/sync_layer.h \
src/gpacmp4/gpac/tools.h \
src/gpacmp4/gpac/utf.h \
src/gpacmp4/gpac/version.h \
src/gpacmp4/gpac_ogg.c \
src/gpacmp4/hinting.c \
src/gpacmp4/ipmpx_code.c \
src/gpacmp4/ipmpx_parse.c \
src/gpacmp4/isom_intern.c \
src/gpacmp4/isom_read.c \
src/gpacmp4/isom_store.c \
src/gpacmp4/isom_write.c \
src/gpacmp4/list.c \
src/gpacmp4/math.c \
src/gpacmp4/media.c \
src/gpacmp4/media_odf.c \
src/gpacmp4/meta.c \
src/gpacmp4/movie_fragments.c \
src/gpacmp4/mp4.c \
src/gpacmp4/odf_code.c \
src/gpacmp4/odf_codec.c \
src/gpacmp4/odf_command.c \
src/gpacmp4/os_config_init.c \
src/gpacmp4/os_divers.c \
src/gpacmp4/os_file.c \
src/gpacmp4/qos.c \
src/gpacmp4/ReadMe.txt
src/gpacmp4/sample_descs.c \
src/gpacmp4/slc.c \
src/gpacmp4/stbl_read.c \
src/gpacmp4/stbl_write.c \
src/gpacmp4/track.c \
src/gpacmp4/tx3g.c \
src/gpacmp4/url.c \
src/gpacmp4/utf.c \
src/lib_ccx/activity.c \
src/lib_ccx/activity.h \
src/lib_ccx/asf_constants.h \
src/lib_ccx/asf_functions.c \
src/lib_ccx/avc_functions.c \
src/lib_ccx/avc_functions.h \
src/lib_ccx/bitstream.h \
src/lib_ccx/cc_bitstream.c \
src/lib_ccx/ccx_common_char_encoding.c \
src/lib_ccx/ccx_common_char_encoding.h \
src/lib_ccx/ccx_common_common.c \
src/lib_ccx/ccx_common_common.h \
src/lib_ccx/ccx_common_constants.c \
src/lib_ccx/ccx_common_constants.h \
src/lib_ccx/ccx_common_option.c \
src/lib_ccx/ccx_common_option.h \
src/lib_ccx/ccx_common_platform.h \
src/lib_ccx/ccx_common_structs.h \
src/lib_ccx/ccx_common_timing.c \
src/lib_ccx/ccx_common_timing.h \
src/lib_ccx/ccx_decoders_608.c \
src/lib_ccx/ccx_decoders_608.h \
src/lib_ccx/ccx_decoders_708.c \
src/lib_ccx/ccx_decoders_708_encoding.c \
src/lib_ccx/ccx_decoders_708_encoding.h \
src/lib_ccx/ccx_decoders_708.h \
src/lib_ccx/ccx_decoders_708_output.c \
src/lib_ccx/ccx_decoders_708_output.h \
src/lib_ccx/ccx_decoders_common.c \
src/lib_ccx/ccx_decoders_common.h \
src/lib_ccx/ccx_decoders_isdb.c \
src/lib_ccx/ccx_decoders_isdb.h \
src/lib_ccx/ccx_decoders_structs.h \
src/lib_ccx/ccx_decoders_vbi.c \
src/lib_ccx/ccx_decoders_vbi.h \
src/lib_ccx/ccx_decoders_xds.c \
src/lib_ccx/ccx_decoders_xds.h \
src/lib_ccx/ccx_demuxer.c \
src/lib_ccx/ccx_demuxer.h \
src/lib_ccx/ccx_dtvcc.c \
src/lib_ccx/ccx_dtvcc.h \
src/lib_ccx/ccx_encoders_common.c \
src/lib_ccx/ccx_encoders_common.h \
src/lib_ccx/ccx_encoders_curl.c \
src/lib_ccx/ccx_encoders_g608.c \
src/lib_ccx/ccx_encoders_helpers.c \
src/lib_ccx/ccx_encoders_helpers.h \
src/lib_ccx/ccx_encoders_sami.c \
src/lib_ccx/ccx_encoders_smptett.c \
src/lib_ccx/ccx_encoders_splitbysentence.c \
src/lib_ccx/ccx_encoders_spupng.c \
src/lib_ccx/ccx_encoders_spupng.h \
src/lib_ccx/ccx_encoders_srt.c \
src/lib_ccx/ccx_encoders_ssa.c \
src/lib_ccx/ccx_encoders_structs.h \
src/lib_ccx/ccx_encoders_transcript.c \
src/lib_ccx/ccx_encoders_webvtt.c \
src/lib_ccx/ccx_encoders_xds.c \
src/lib_ccx/ccx_encoders_xds.h \
src/lib_ccx/ccx_gxf.c \
src/lib_ccx/ccx_gxf.h \
src/lib_ccx/ccx_mp4.h \
src/lib_ccx/ccx_share.c \
src/lib_ccx/ccx_share.h \
src/lib_ccx/ccx_sub_entry_message.pb-c.c \
src/lib_ccx/ccx_sub_entry_message.pb-c.h \
src/lib_ccx/CMakeLists.txt
src/lib_ccx/compile_info.h \
src/lib_ccx/compile_info_real.h \
src/lib_ccx/configuration.c \
src/lib_ccx/configuration.h \
src/lib_ccx/disable_warnings.h \
src/lib_ccx/dvb_subtitle_decoder.c \
src/lib_ccx/dvb_subtitle_decoder.h \
src/lib_ccx/dvd_subtitle_decoder.c \
src/lib_ccx/dvd_subtitle_decoder.h \
src/lib_ccx/es_functions.c \
src/lib_ccx/es_userdata.c \
src/lib_ccx/ffmpeg_intgr.c \
src/lib_ccx/ffmpeg_intgr.h \
src/lib_ccx/file_buffer.h \
src/lib_ccx/file_functions.c \
src/lib_ccx/general_loop.c \
src/lib_ccx/hamming.h \
src/lib_ccx/hardsubx.c \
src/lib_ccx/hardsubx_classifier.c \
src/lib_ccx/hardsubx_decoder.c \
src/lib_ccx/hardsubx.h \
src/lib_ccx/hardsubx_imgops.c \
src/lib_ccx/hardsubx_utility.c \
src/lib_ccx/lib_ccx.c \
src/lib_ccx/lib_ccx.h \
src/lib_ccx/list.h \
src/lib_ccx/matroska.c \
src/lib_ccx/matroska.h \
src/lib_ccx/myth.c \
src/lib_ccx/networking.c \
src/lib_ccx/networking.h \
src/lib_ccx/ocr.c \
src/lib_ccx/ocr.h \
src/lib_ccx/output.c \
src/lib_ccx/params.c \
src/lib_ccx/params_dump.c \
src/lib_ccx/sequencing.c \
src/lib_ccx/spupng_encoder.c \
src/lib_ccx/spupng_encoder.h \
src/lib_ccx/stdintmsc.h \
src/lib_ccx/stream_functions.c \
src/lib_ccx/teletext.h \
src/lib_ccx/telxcc.c \
src/lib_ccx/ts_functions.c \
src/lib_ccx/ts_functions.h \
src/lib_ccx/ts_info.c \
src/lib_ccx/ts_tables.c \
src/lib_ccx/ts_tables_epg.c \
src/lib_ccx/utility.c \
src/lib_ccx/utility.h \
src/lib_ccx/wtv_constants.h \
src/lib_ccx/wtv_functions.c \
src/lib_hash/sha2.c \
src/lib_hash/sha2.h \
src/libpng/png.c \
src/libpng/pngconf.h \
src/libpng/pngdebug.h \
src/libpng/pngerror.c \
src/libpng/pngget.c \
src/libpng/png.h \
src/libpng/pnginfo.h \
src/libpng/pnglibconf.h \
src/libpng/pngmem.c \
src/libpng/pngpread.c \
src/libpng/pngpriv.h \
src/libpng/pngread.c \
src/libpng/pngrio.c \
src/libpng/pngrtran.c \
src/libpng/pngrutil.c \
src/libpng/pngset.c \
src/libpng/pngstruct.h \
src/libpng/pngtrans.c \
src/libpng/pngwio.c \
src/libpng/pngwrite.c \
src/libpng/pngwtran.c \
src/libpng/pngwutil.c \
src/protobuf-c/protobuf-c.c \
src/protobuf-c/protobuf-c.h \
src/utf8proc/utf8proc.c \
src/utf8proc/utf8proc_data.c \
src/utf8proc/utf8proc.h \
src/win_iconv/iconv.h \
src/win_iconv/win_iconv.c \
src/win_spec_incld/dirent.h \
src/win_spec_incld/inttypes.h \
src/win_spec_incld/stdint.h \
src/zlib/adler32.c \
src/zlib/compress.c \
src/zlib/crc32.c \
src/zlib/crc32.h \
src/zlib/deflate.c \
src/zlib/deflate.h \
src/zlib/gzclose.c \
src/zlib/gzguts.h \
src/zlib/gzlib.c \
src/zlib/gzread.c \
src/zlib/gzwrite.c \
src/zlib/infback.c \
src/zlib/inffast.c \
src/zlib/inffast.h \
src/zlib/inffixed.h \
src/zlib/inflate.c \
src/zlib/inflate.h \
src/zlib/inftrees.c \
src/zlib/inftrees.h \
src/zlib/trees.c \
src/zlib/trees.h \
src/zlib/uncompr.c \
src/zlib/zconf.h \
src/zlib/zlib.h \
src/zlib/zutil.c \
src/zlib/zutil.h \
src/zvbi/bcd.h \
src/zvbi/bit_slicer.c \
src/zvbi/bit_slicer.h \
src/zvbi/decoder.c \
src/zvbi/macros.h \
src/zvbi/misc.h \
src/zvbi/raw_decoder.c \
src/zvbi/raw_decoder.h \
src/zvbi/sampling_par.c \
src/zvbi/sampling_par.h \
src/zvbi/sliced.h \
src/zvbi/zvbi_decoder.h
ccextractor_CFLAGS =-std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR
ccextractor_CPPFLAGS =-I /usr/include/leptonica/ -I /usr/include/tesseract/ -I src/lib_ccx/ -I src/gpacmp4/ -I src/libpng/ -I src/zlib/ -I src/zvbi/ -I src/lib_hash/ -I src/protobuf-c/ -I src/utf8proc/
ccextractor_LDADD =-lm -ltesseract -llept
ccextractor_LDFLAGS=-zmuldefs
tree
in src
dir is: src
目录中的tree
是:
.
├── ccextractor.c
├── CCExtractorConfig.h.in
├── ccextractor.o
├── CMakeLists.txt
├── gpacmp4
│ ├── avc_ext.c
│ ├── avc_ext.o
│ ├── avilib.c
│ ├── descriptors.o
│ ├── drm_sample.c
│ ├── drm_sample.o
│ ├── error.c
│ ├── error.o
│ ├── gpac
│ │ ├── avparse.h
│ │ ├── base_coding.h
│ │ ├── bitstream.h
│ │ ├── config_file.h
│ │ ├── configuration.h
│ │ ├── constants.h
│ │ ├── events_constants.h
│ │ ├── ietf.h
│ │ ├── internal
│ │ │ ├── avilib.h
│ │ │ ├── isomedia_dev.h
│ │ │ ├── media_dev.h
│ │ │ ├── odf_dev.h
│ │ │ ├── odf_parse_common.h
│ │ │ └── ogg.h
│ │ ├── isomedia.h
│ │ ├── list.h
│ │ ├── math.h
│ │ ├── media_tools.h
│ │ ├── mpeg4_odf.h
│ │ ├── network.h
│ │ ├── revision.h
│ │ ├── setup.h
│ │ ├── sync_layer.h
│ │ ├── tools.h
│ │ ├── utf.h
│ │ └── version.h
│ ├── gpac_ogg.c
│ ├── hinting.c
│ ├── ipmpx_code.c
│ ├── ipmpx_parse.c
│ ├── isom_intern.c
│ ├── isom_read.c
│ ├── isom_store.c
│ ├── isom_write.c
│ ├── list.c
│ ├── math.c
│ ├── media.c
│ ├── media_odf.c
│ ├── meta.c
│ ├── movie_fragments.c
│ ├── mp4.c
│ ├── odf_code.c
│ ├── odf_codec.c
│ ├── odf_command.c
│ ├── os_config_init.c
│ ├── os_divers.c
│ ├── os_file.c
│ ├── qos.c
│ ├── ReadMe.txt
│ ├── sample_descs.c
│ ├── slc.c
│ ├── stbl_read.c
│ ├── stbl_write.c
│ ├── track.c
│ ├── tx3g.c
│ ├── url.c
│ └── utf.c
├── lib_ccx
│ ├── activity.c
│ ├── activity.h
│ ├── asf_constants.h
│ ├── asf_functions.c
│ ├── avc_functions.c
│ ├── avc_functions.h
│ ├── bitstream.h
│ ├── hamming.h
│ ├── hardsubx.c
│ ├── hardsubx_classifier.c
│ ├── hardsubx_decoder.c
│ ├── hardsubx.h
│ ├── hardsubx_imgops.c
│ ├── hardsubx_utility.c
│ ├── ts_functions.h
│ ├── ts_info.c
│ ├── ts_tables.c
│ ├── ts_tables_epg.c
│ ├── utility.c
│ ├── utility.h
│ ├── wtv_constants.h
│ └── wtv_functions.c
├── lib_hash
│ ├── README
│ ├── sha2.c
│ └── sha2.h
├── libpng
│ ├── png.c
│ ├── pngconf.h
│ ├── pngdebug.h
│ ├── pngerror.c
│ ├── pngget.c
│ ├── png.h
│ ├── pnginfo.h
│ └── pngwutil.c
├── protobuf-c
│ ├── protobuf-c.c
│ └── protobuf-c.h
├── utf8proc
│ ├── utf8proc.c
│ ├── utf8proc_data.c
│ └── utf8proc.h
├── win_iconv
│ ├── iconv.h
│ └── win_iconv.c
├── win_spec_incld
│ ├── dirent.h
│ ├── inttypes.h
│ └── stdint.h
├── zlib
│ ├── adler32.c
│ ├── compress.c
│ ├── crc32.c
│ ├── crc32.h
│ ├── trees.c
│ ├── trees.h
│ ├── uncompr.c
│ ├── zconf.h
│ ├── zlib.h
│ ├── zutil.c
│ └── zutil.h
└── zvbi
├── bcd.h
├── bit_slicer.c
├── bit_slicer.h
├── decoder.c
├── macros.h
├── misc.h
├── raw_decoder.c
├── raw_decoder.h
And also, all includes are done with full path in sub directories of src
, like for a file in gpacmp4
directory, #include <gpac/avparse.h>
. 而且,所有包含都使用
src
子目录中的完整路径来完成,例如gpacmp4
目录中的文件#include <gpac/avparse.h>
。 All but the main ccextractor.c
file, for which all the -I flags
are provided. 除了主
ccextractor.c
文件外,所有文件都提供了-I flags
。
Even the slightest help is appreciated. 即使有丝毫帮助,我们也感激不尽。
Here are some initial statements which make
invokes: 以下是一些可以
make
调用的初始语句:
gcc -DHAVE_CONFIG_H -I. -I /usr/include/leptonica/ -I /usr/include/tesseract/ -I src/lib_ccx/ -I src/gpacmp4/ -I src/libpng/ -I src/zlib/ -I src/zvbi/ -I src/lib_hash/ -I src/protobuf-c/ -I src/utf8proc/ -std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR -g -O2 -MT src/ccextractor-ccextractor.o -MD -MP -MF src/.deps/ccextractor-ccextractor.Tpo -c -o src/ccextractor-ccextractor.o `test -f 'src/ccextractor.c' || echo './'`src/ccextractor.c
mv -f src/gpacmp4/.deps/ccextractor-avc_ext.Tpo src/gpacmp4/.deps/ccextractor-avc_ext.Po
gcc -DHAVE_CONFIG_H -I. -I /usr/include/leptonica/ -I /usr/include/tesseract/ -I src/lib_ccx/ -I src/gpacmp4/ -I src/libpng/ -I src/zlib/ -I src/zvbi/ -I src/lib_hash/ -I src/protobuf-c/ -I src/utf8proc/ -std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR -g -O2 -MT src/gpacmp4/ccextractor-avilib.o -MD -MP -MF src/gpacmp4/.deps/ccextractor-avilib.Tpo -c -o src/gpacmp4/ccextractor-avilib.o `test -f 'src/gpacmp4/avilib.c' || echo './'`src/gpacmp4/avilib.c
mv -f src/gpacmp4/.deps/ccextractor-avilib.Tpo src/gpacmp4/.deps/ccextractor-avilib.Po
Statement which make
invokes just before showing undefined reference errors: 在显示未定义的引用错误之前,
make
调用的语句:
gcc -std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR -g -O2 -zmuldefs -o ccextractor src/ccextractor-ccextractor.o src/gpacmp4/ccextractor-avc_ext.o src/gpacmp4/ccextractor-avilib.o src/gpacmp4/ccextractor-av_parsers.o src/gpacmp4/ccextractor-base_encoding.o src/gpacmp4/ccextractor-bitstream.o src/gpacmp4/ccextractor-box_code_3gpp.o src/gpacmp4/ccextractor-box_code_adobe.o src/gpacmp4/ccextractor-box_code_apple.o src/gpacmp4/ccextractor-box_code_base.o src/gpacmp4/ccextractor-box_code_drm.o src/gpacmp4/ccextractor-box_code_meta.o src/gpacmp4/ccextractor-box_funcs.o src/gpacmp4/ccextractor-configfile.o src/gpacmp4/ccextractor-data_map.o src/gpacmp4/ccextractor-desc_private.o src/gpacmp4/ccextractor-descriptors.o src/gpacmp4/ccextractor-drm_sample.o src/gpacmp4/ccextractor-error.o -lm -ltesseract -llept
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/ccextractor.c:32: undefined reference to `mprint'
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/ccextractor.c:33: undefined reference to `change_filename_requested'
src/ccextractor-ccextractor.o: In function `main':
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/ccextractor.c:68: undefined reference to `init_options'
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/ccextractor.c:123: undefined reference to `params_dump'
src/gpacmp4/ccextractor-drm_sample.o: In function `gf_isom_ipmpx_remove_tool_list':
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/gpacmp4/drm_sample.c:1421: undefined reference to `gf_odf_desc_del'
collect2: error: ld returned 1 exit status
Makefile:497: recipe for target 'ccextractor' failed
make[1]: *** [ccextractor] Error 1
make[1]: Leaving directory '/media/mayank/Mayank/GSOC 2017/Projects/ccextractor'
Makefile:335: recipe for target 'all' failed
make: *** [all] Error 2
PS: Any help is appreciated.I tried many things including changing the path of the #include <path/to/header>
statements in code and then adding -I
statement for those path in CPPFLAGS
but that didn't help either. PS:可以提供任何帮助,我做了很多尝试,包括更改代码中的
#include <path/to/header>
语句的#include <path/to/header>
,然后在CPPFLAGS
为这些路径添加-I
语句,但这都没有帮助。 Almost all the undefined reference errors are from the functions declared in the headers residing in subdirectories of directories in source like, src/dir/subdir
the -I
flags are added only till src/dir/
and then the files in src/dir/
have statements like #include<subdir/filename.h>
. 几乎所有的未定义引用错误是由居住在源目录的子目录头声明的功能,如,
src/dir/subdir
的-I
添加标志只能做到src/dir/
然后将文件中src/dir/
有诸如#include<subdir/filename.h>
类的语句。
PPS: I used grep -r "<Name_of_function_leading_to_error>" .
PPS:我使用了
grep -r "<Name_of_function_leading_to_error>" .
in src
to find out the declaration header. 在
src
中找出宣告标头。
Undefined references mean missing libraries or wrong library order. 未定义的引用意味着缺少库或库顺序错误。 So changing -I flags has no effect.
因此,更改-I标志无效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.