前言
今天在一个centos7.9 的系统下移植一个之前在yocto 下的http web程序,这个程序在解决字符转换的问题之前用的是 C++ 标准库中的一个模板类codecvt ,之前在yocto 和ubuntu18.04和win10 VS2019下都运行正常,在centos7.9 下出现了问题,经过分析查找,发现是由于centos7.9 默认GCC 版本(4.8.5)过低造成的, 由于这个centos7.9上已经有一些程序和编译环境,如果升级怕对其它的环境产生影响,本文在不改编译环境的基础上(即升级GCC版本)解决这个问题,记录下过程,供以后参考。
一、问题描述
之前在其它系统下正确运行的代码在新的centos7.9环境下编译出现了如下问题:
二、编译脚本修改
2.1 原来编译脚本
include ../template.mk
LIBNAME=itap.http_webserver
CPPPATH=.
cflags = -Wall -g3 -pthread -D_DEBUG -D_LINUX
cflags +=-I../../depend/include -I../../include
libpath+=-L../../$(CompileResult)
libpath+=-L../../depend/lib
libpath+=-L../../depend/lib/libmodbus
#特性动态库
libs+=-litap.vos -litap.log -litap.utils
libs+=-ldl -litap.netsdk
libs+=-litap.sqlite
${
LIBNAME}:
${
CC} -std=c++14 -o ${
LIBNAME} ${
cflags} ${
CPPPATH}/*.cpp ${libpath} ${libs}
cp ${LIBNAME} ../../$(CompileResult)/
cp ${LIBNAME} ../../HttpWeb/
clean:
rm -rf *.o *.so
rm -rf ${LIBNAME}
2.2 修改后编译脚本
修改后的脚本文件如下:
include ../template.mk
LIBNAME=itap.http_webserver
# 检测操作系统
UNAME_S := $(shell uname -s)
# 根据不同系统设置编译选项
ifeq ($(UNAME_S), Linux)
# 检查是否为 CentOS 7.x
CENTOS_VERSION :