HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*
HEVC decoder port Android Warning: invalid conversion from 'signed char*' to 'char const*
>我正在尝试将HEVC交叉编译为Android https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/trunk/我的原生系统是 Ubuntu 12.04 32 位。我使用 android-NDK r9c 的独立工具链创建了目标系统,如下所示
./make-standalone-toolchain.sh --platform=android-14 --toolchain=arm-linux-androideabi-4.6 --install-dir=/my-android-toolchain14
我在 ~/.bashrc 中添加了以下行
export PATH=/home/asdf/Android/android-sdk-linux/tools:$PATH
export PATH=/home/asdf/Android/android-sdk-linux/platform-tools:$PATH
export PATH=/home/asdf/Android/android-ndk-r9c:$PATH
export PATH=/home/asdf/Android/my-android-toolchain14/bin:$PATH
export PATH=/home/asdf/Android/my-android-toolchain14/sysroot:$PATH
这是修改后的生成文件
#########################################################
# check CONFIG parameter
#########################################################
ifneq ($(CONFIG), LIBRARY)
ifneq ($(CONFIG), CONSOLE)
CONFIG_ERR = TRUE
endif
endif
#########################################################
# executables used
#########################################################
CPP = /home/nih/Android/my-android-toolchain14/bin/arm-linux-androideabi-g++ #g++
CC = /home/nih/Android/my-android-toolchain14/bin/arm-linux-androideabi-gcc #gcc
AR = /home/nih/Android/my-android-toolchain14/bin/arm-linux-androideabi-ar #ar
LD = $(CPP)
ASM = nasm #assembler/disassembler for Intel x86
#########################################################
# output file names and version information
#########################################################
ifeq ($(CONFIG), LIBRARY)
# the libraries that can be created
STAT_DEBUG_OUT = $(LIB_DIR)/lib$(PRJ_NAME)Staticd.a
STAT_RELEASE_OUT = $(LIB_DIR)/lib$(PRJ_NAME)Static.a
DYN_DEBUG_OUT = $(LIB_DIR)/lib$(PRJ_NAME)d.so
DYN_RELEASE_OUT = $(LIB_DIR)/lib$(PRJ_NAME).so
#
else
ifeq ($(CONFIG), CONSOLE)
# the executables that can be created
STAT_DEBUG_OUT = $(BIN_DIR)/$(PRJ_NAME)Staticd
STAT_RELEASE_OUT = $(BIN_DIR)/$(PRJ_NAME)Static
DYN_DEBUG_OUT = $(BIN_DIR)/$(PRJ_NAME)d
DYN_RELEASE_OUT = $(BIN_DIR)/$(PRJ_NAME)
#
endif
endif
#########################################################
# c compiler flags
#########################################################
# default cpp flags for all configurations
#CPPFLAGS = -Wall -fPIC $(DEFS) -I$(CURDIR)/$(INC_DIR) $(USER_INC_DIRS)
CPPFLAGS = -mthumb -fPIC $(DEFS) -I$(CURDIR)/$(INC_DIR) $(USER_INC_DIRS) -Wall -Wshadow -Wno-sign-compare -fpermissive #-Werror
##########
# enforce 32-bit build : 1=yes, 0=no
##########
M32?= 0
ifeq ($(M32),1)
CPPFLAGS+=-m32
endif
##########
#
# debug cpp flags
DEBUG_CPPFLAGS = -g -D_DEBUG
#
# release cpp
RELEASE_CPPFLAGS = -O3 -Wuninitialized
#########################################################
# assembler compiler flags
#########################################################
# default asm flags for all configurations
ASMFLAGS = -f elf $(DEFS)
#
# debug asm flags
DEBUG_ASMFLAGS = -g
#
# release asm flags
RELEASE_ASMFLAGS =
#########################################################
# linker flags
#########################################################
# linker flags for all
ALL_LDFLAGS = -Wall
##########
# enforce 32-bit build : 1=yes, 0=no
##########
ifeq ($(M32),1)
ALL_LDFLAGS+=-m32
endif
##########
ifeq ($(CONFIG), LIBRARY)
# linker flags for library
# LDFLAGS = $(ALL_LDFLAGS) -shared -Wl,-Bsymbolic
LDFLAGS = $(ALL_LDFLAGS) -shared #-lgnustl_shared
#
# debug linker flags for library
DEBUG_LDFLAGS = -Wl,-soname,lib$(PRJ_NAME)d.so.$(VER)
#
# release linker flags for library
RELEASE_LDFLAGS = -Wl,-soname,lib$(PRJ_NAME).so.$(VER)
#
else
ifeq ($(CONFIG), CONSOLE)
# linker flags for console
LDFLAGS = $(ALL_LDFLAGS)
#
# debug linker flags for console
DEBUG_LDFLAGS =
#
# release linker flags for console
RELEASE_LDFLAGS =
#
endif
endif
#########################################################
# objects that have to be created
#########################################################
# the object types that have to be created
RELEASE_OBJS = $(OBJS:.o=.r.o)
DEBUG_OBJS = $(OBJS:.o=.d.o)
#########################################################
# rules
#########################################################
# suffixes
.SUFFIXES: .cpp .asm .r.o .d.o
#########################################################
# assembler rules
#########################################################
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR)/%.asm
$(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR)/%.asm
$(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR1)/%.asm
$(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR1)/%.asm
$(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR2)/%.asm
$(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR2)/%.asm
$(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR3)/%.asm
$(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR3)/%.asm
$(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR4)/%.asm
$(ASM) $(ASMFLAGS) $(RELEASE_ASMFLAGS) -o $@ $<
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR4)/%.asm
$(ASM) $(ASMFLAGS) $(DEBUG_ASMFLAGS) -o $@ $<
#########################################################
# c rules
#########################################################
# Generate dependency files during compilation
# see also: http://make.paulandlesley.org/autodep.html
# 2005-01-25 Steffen Kamp (kamp@ient.rwth-aachen.de), RWTH Aachen
define COMPILE_AND_DEPEND_RELEASE
$(CPP) -c -MMD -MF $(OBJ_DIR)/$*.r.d -MT $(OBJ_DIR)/$*.r.o $(CPPFLAGS) $(RELEASE_CPPFLAGS) -o $@ $(CURDIR)/$<
@cp $(OBJ_DIR)/$*.r.d $(OBJ_DIR)/$*.r.P;
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\$$//'
-e '/^$$/ d' -e 's/$$/ :/' < $(OBJ_DIR)/$*.r.d >> $(OBJ_DIR)/$*.r.P;
rm -f $(OBJ_DIR)/$*.r.d
endef
define COMPILE_AND_DEPEND_DEBUG
$(CPP) -c -MMD -MF $(OBJ_DIR)/$*.d.d -MT $(OBJ_DIR)/$*.d.o $(CPPFLAGS) $(DEBUG_CPPFLAGS) -o $@ $(CURDIR)/$<
@cp $(OBJ_DIR)/$*.d.d $(OBJ_DIR)/$*.d.P;
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\$$//'
-e '/^$$/ d' -e 's/$$/ :/' < $(OBJ_DIR)/$*.d.d >> $(OBJ_DIR)/$*.d.P;
rm -f $(OBJ_DIR)/$*.d.d
endef
define COMPILE_AND_DEPEND_RELEASE_C
$(CC) -c -MMD -MF $(OBJ_DIR)/$*.r.d -MT $(OBJ_DIR)/$*.r.o $(CPPFLAGS) $(RELEASE_CPPFLAGS) -o $@ $(CURDIR)/$<
@cp $(OBJ_DIR)/$*.r.d $(OBJ_DIR)/$*.r.P;
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\$$//'
-e '/^$$/ d' -e 's/$$/ :/' < $(OBJ_DIR)/$*.r.d >> $(OBJ_DIR)/$*.r.P;
rm -f $(OBJ_DIR)/$*.r.d
endef
define COMPILE_AND_DEPEND_DEBUG_C
$(CC) -c -MMD -MF $(OBJ_DIR)/$*.d.d -MT $(OBJ_DIR)/$*.d.o $(CPPFLAGS) $(DEBUG_CPPFLAGS) -o $@ $(CURDIR)/$<
@cp $(OBJ_DIR)/$*.d.d $(OBJ_DIR)/$*.d.P;
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\$$//'
-e '/^$$/ d' -e 's/$$/ :/' < $(OBJ_DIR)/$*.d.d >> $(OBJ_DIR)/$*.d.P;
rm -f $(OBJ_DIR)/$*.d.d
endef
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR)/%.cpp
$(COMPILE_AND_DEPEND_RELEASE)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR)/%.cpp
$(COMPILE_AND_DEPEND_DEBUG)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR1)/%.cpp
$(COMPILE_AND_DEPEND_RELEASE)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR1)/%.cpp
$(COMPILE_AND_DEPEND_DEBUG)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR2)/%.cpp
$(COMPILE_AND_DEPEND_RELEASE)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR2)/%.cpp
$(COMPILE_AND_DEPEND_DEBUG)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR3)/%.cpp
$(COMPILE_AND_DEPEND_RELEASE)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR3)/%.cpp
$(COMPILE_AND_DEPEND_DEBUG)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR4)/%.cpp
$(COMPILE_AND_DEPEND_RELEASE)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR4)/%.cpp
$(COMPILE_AND_DEPEND_DEBUG)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR)/%.c
$(COMPILE_AND_DEPEND_RELEASE_C)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR)/%.c
$(COMPILE_AND_DEPEND_DEBUG_C)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR1)/%.c
$(COMPILE_AND_DEPEND_RELEASE_C)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR1)/%.c
$(COMPILE_AND_DEPEND_DEBUG_C)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR2)/%.c
$(COMPILE_AND_DEPEND_RELEASE_C)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR2)/%.c
$(COMPILE_AND_DEPEND_DEBUG_C)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR3)/%.c
$(COMPILE_AND_DEPEND_RELEASE_C)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR3)/%.c
$(COMPILE_AND_DEPEND_DEBUG_C)
# create release objects
$(OBJ_DIR)/%.r.o: $(SRC_DIR4)/%.c
$(COMPILE_AND_DEPEND_RELEASE_C)
# create debug objects
$(OBJ_DIR)/%.d.o: $(SRC_DIR4)/%.c
$(COMPILE_AND_DEPEND_DEBUG_C)
#########################################################
# directory settings
#########################################################
ifeq ($(CONFIG), LIBRARY)
# directories that have to be created for a library
CHECK_DIRS = $(OBJ_DIR) $(LIB_DIR)
#
else
ifeq ($(CONFIG), CONSOLE)
# directories that have to be created for console and MFC
CHECK_DIRS = $(OBJ_DIR) $(BIN_DIR)
#
endif
endif
#########################################################
# targets
#########################################################
all: check_errors debug release
debug: check_errors
$(CHECK_DIRS)
$(STAT_DEBUG_OUT)
release: check_errors
$(CHECK_DIRS)
$(STAT_RELEASE_OUT)
#all: check_errors debug release
#
#debug: check_errors
# $(CHECK_DIRS)
# $(DYN_DEBUG_OUT)
# $(STAT_DEBUG_OUT)
#
#release: check_errors
# $(CHECK_DIRS)
# $(DYN_RELEASE_OUT)
# $(STAT_RELEASE_OUT)
#
#stat_debug: check_errors
# $(CHECK_DIRS)
# $(STAT_DEBUG_OUT)
#
#dyn_debug: check_errors
# $(CHECK_DIRS)
# $(DYN_DEBUG_OUT)
#
#stat_release: check_errors
# $(CHECK_DIRS)
# $(STAT_RELEASE_OUT)
#
#dyn_release: check_errors
# $(CHECK_DIRS)
# $(DYN_RELEASE_OUT)
##########################################################
# check for errors
##########################################################
check_errors:
@if [ "$(CONFIG_ERR)" = "TRUE" ]; then
echo "Wrong CONFIG parameter specified: $(CONFIG)";
false;
fi
##########################################################
# create directories
##########################################################
$(OBJ_DIR):
@if [ ! -d $(OBJ_DIR) ]; then
mkdir $(OBJ_DIR);
fi
$(LIB_DIR):
@if [ ! -d $(LIB_DIR) ]; then
mkdir $(LIB_DIR);
fi
$(BIN_DIR):
@if [ ! -d $(BIN_DIR) ]; then
mkdir $(BIN_DIR);
fi
##########################################################
# create output files
##########################################################
ifeq ($(CONFIG), LIBRARY)
#
# create static debug out
$(STAT_DEBUG_OUT): $(DEBUG_OBJS)
$(AR) -crs $@ $(DEBUG_OBJS)
#
#
# create release debug out
$(STAT_RELEASE_OUT): $(RELEASE_OBJS)
$(AR) -crs $@ $(RELEASE_OBJS)
#
#
# create dynamic debug out
$(DYN_DEBUG_OUT): $(DYN_DEBUG_OUT).$(VER)
ln -fs lib$(PRJ_NAME)d.so.$(VER) $@
#
# create dynamic debug out
$(DYN_DEBUG_OUT).$(VER): $(DEBUG_OBJS)
$(LD) $(LDFLAGS) $(DEBUG_LDFLAGS) -o $@ $(DEBUG_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(DEBUG_LIBS) $(DYN_LIBS) $(DYN_DEBUG_LIBS)
#
#
# create dynamic release out
$(DYN_RELEASE_OUT): $(DYN_RELEASE_OUT).$(VER)
ln -fs lib$(PRJ_NAME).so.$(VER) $@
#
# create dynamic release out
$(DYN_RELEASE_OUT).$(VER): $(RELEASE_OBJS)
$(LD) $(LDFLAGS) $(RELEASE_LDFLAGS) -o $@ $(RELEASE_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(RELEASE_LIBS) $(DYN_LIBS) $(DYN_RELEASE_LIBS)
#
#
#
#
#
else
ifeq ($(CONFIG), CONSOLE)
#
# added linked libraries to target prerequisites - $(*_PREREQS) variables - to force relinking when libraries have been rebuilt
# 2005-01-25 Steffen Kamp (kamp@ient.rwth-aachen.de), RWTH Aachen
#
# create static debug out
$(STAT_DEBUG_OUT): $(DEBUG_OBJS) $(STAT_DEBUG_PREREQS)
$(LD) -o $@ $(LDFLAGS) $(DEBUG_LDFLAGS) $(DEBUG_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(DEBUG_LIBS) $(STAT_LIBS) $(STAT_DEBUG_LIBS)
#
#
# create static release out
$(STAT_RELEASE_OUT): $(RELEASE_OBJS) $(STAT_RELEASE_PREREQS)
$(LD) -o $@ $(LDFLAGS) $(RELEASE_LDFLAGS) $(RELEASE_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(RELEASE_LIBS) $(STAT_LIBS) $(STAT_RELEASE_LIBS)
#
#
# create dynamic debug out
$(DYN_DEBUG_OUT): $(DEBUG_OBJS) $(DYN_DEBUG_PREREQS)
$(LD) -o $@ $(LDFLAGS) $(DEBUG_LDFLAGS) $(DEBUG_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(DEBUG_LIBS) $(DYN_LIBS) $(DYN_DEBUG_LIBS)
#
#
# create dynamic release out
$(DYN_RELEASE_OUT): $(RELEASE_OBJS) $(DYN_RELEASE_PREREQS)
$(LD) -o $@ $(LDFLAGS) $(RELEASE_LDFLAGS) $(RELEASE_OBJS) -L$(LIB_DIR) $(USER_LIB_DIRS) $(LIBS) $(RELEASE_LIBS) $(DYN_LIBS) $(DYN_RELEASE_LIBS)
#
#
endif
endif
##########################################################
# delete all produced files
##########################################################
clean:
/bin/rm -rf $(STAT_DEBUG_OUT)
/bin/rm -rf $(STAT_RELEASE_OUT)
/bin/rm -rf $(DYN_DEBUG_OUT)
/bin/rm -rf $(DYN_RELEASE_OUT)
/bin/rm -rf $(OBJ_DIR)
ifeq ($(CONFIG), LIBRARY)
/bin/rm -rf $(DYN_DEBUG_OUT).$(VER)
/bin/rm -rf $(DYN_RELEASE_OUT).$(VER)
endif
##########################################################
# include dependency files
##########################################################
-include $(OBJS:.o=.d.P)
-include $(OBJS:.o=.r.P)
我得到的编译器警告是:invalid conversion from 'signed char*' to 'char const*
后来由于此问题strstr
崩溃
: error: call of overloaded 'strstr(Char [1024], const Char [22])' is ambiguous
/home/nih/HM-latest/build/linux/lib/TLibCommon/../../../../source/Lib/TLibCommon/TComSlice.cpp:1916:73: note: candidates are:
/home/nih/Android/my-android-toolchain14/bin/../sysroot/usr/include/string.h:61:15: note: char* strstr(char const*, char const*) <near match>
/home/nih/Android/my-android-toolchain14/bin/../sysroot/usr/include/string.h:61:15: note: no known conversion for argument 2 from 'const Char [22] {aka signed char const [22]}' to 'char const*'
顺便说一下,代码可以在本机系统上完美编译和运行。
这个问题是因为缺乏对基本C++库的支持吗?我是否需要提供不同的包含路径?由于这是一个巨大的代码,因此手动处理这些警告的选项是不可能的。
任何提示将不胜感激,感谢您的时间
这是一个
呢工具链问题。 也许您可以通过修改Makefile
来抑制这种错误。 或者,您可以通过将其第二个参数准备为char const *
而不是字符缓冲区来临时修改它调用strstr()
的TComSlice.cpp
。 或者尝试使用另一个 Android 工具链,虽然我不认为它们有什么不同,但谁知道
我认为添加到 CPPFLAGS 中的 -fsigned-char 可以解决这个问题
工具链很好。我尝试了codeSourcery和本机arm-gcc编译器,它们都有相同的输出。HM参考代码是问题所在。我使用了以前的版本,特别是HM 10.0,我设法交叉编译它而没有问题。
相关文章:
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 如何从WIC解码器确定自上而下/自下而上?
- 无法在 HEVC 解码器上设置输出类型 IMFTransform
- 连接无线电流和 MP3 解码器
- h264_cuvid编解码器未找到
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 如何使用 ffmpeg 将 3840 nb_samples编码为请求 1024 的编解码器
- FFMPEG:为什么当我调用av_codec_next()时,我所有的编解码器都没有显示出来
- OpenCV 检查计算机上是否安装了视频编解码器 (C++)
- FFMPEG 解码器似乎会丢帧
- 直接显示通用媒体解码器
- OpenCV:FFMPEG:编解码器 ID 12 和格式 'mp4 / MP4 不支持标记
- 带有 H264 编解码器的 libav 错误消息。"非严格单调PTS"
- C++ 文本消息解码器脚本 编译器 "expects unqualified id" 之前 if 和 else 语句
- 为什么编解码器X264/X265忽略了输入框架的PT和DTS
- 如何修复"UnicodeDecodeError:"utf-8"编解码器无法解码字节时使用Python C扩展?
- IWICImagingFactory::CreateDecoderFromFilename() 即使在解码器被销毁后,也
- 致命的Python错误:Py_Initialize:无法加载文件系统编解码器&ModuleNotFoundError
- C++ avformat_open_input返回空编解码器、宽度和高度
- HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*