沈天真
作者沈天真·2021-08-15 12:23
售前支持·IPS

地铁综合监控应用迁移到K1 Power Linux问题记录

字数 1685阅读 3023评论 0赞 0

最近与ISV合作,将其地铁综合监控应用从x86 Linux迁移到K1 Power Linux平台,中间遇到的问题记录如下,供各位参考。

迁移环境: K1 Power S922 + Redhat 7.6 ppc64le

问题:通过源码编译安装 MySQL 5.7.34 ,安装后 mysqld 无法启动

原因:

通过查看 mysqld 日志,发现启动的不是 5.7.34 ,而是 MariaDB 5.5 ,原来是Redhat 7.5 安装时,已经安装上了系统自带的 MariaDB 5.5 ,它的优先级似乎高于 5.7.34

解决方法:

把系统自带的 MariaDB 5.5 删除,重新启动 mysqld

问题:使用 at 12.0 ,编译应用代码,报错

原因:

这是因为 at 12.0 自带的gcc编译器是 8.4版本,遵循 C++11 规范,对于语法检查比较严格。而应用代码开发的比较早,在当时的编译器是 gcc 4.7

解决方法:

参考

https://blog.csdn.net/nh5431313/article/details/78753597

https://lixiaogang5.blog.csdn.net/article/details/94435105?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.essearch_pc_relevant&;depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.essearch_pc_relevant

可以在编译选项中指定使用标准为 c++98 ,或者更改代码,增加空格

C++11要求,当字符串跟变量连接的时候,必须增加一个空格才行。因此解决方案有2个:
(1) Makefile文件明确告知编译方式采用C++98:CFLAGS += -std=c++98
(2) 增加空格

问题:缺少 libasound.so

原因:

没有安装 alsa-lib-devel

解决方法:

安装 alsa-lib-devel

https://buildlogs.centos.org/c7.1810.00.ppc64le/alsa-lib/20181030170600/1.1.6-2.el7.ppc64le/

https://mirrors.tuna.tsinghua.edu.cn/centos-altarch/7.9.2009/os/power9/Packages/

问题: 无法识别类型 BYTE

原因:

声明的代码段如下

此代码段是为 HP-Unix 解决字节序问题所加,针对unix操作系统大端的特殊处理。而现在是在 Linux操作系统。并且猜测 gcc 4.7 在这一块检查并不严格或者有bug,导致用 gcc 4.7 编译并不报错。

解决方法:

在 gcc 8.4 编译时增加宏定义

问题:get_mac_addr 报错

原因:

strcat 的参数会导致未定义的行为

参考:

https://stackoverflow.com/questions/53584293/cannot-access-memory-at-address

strcat(s,(char*)(intptr_t)year); invokes Undefined Behavior. year is not a nul-terminated string which likely causes strcat to go screaming off across your function stack looking for the first nul-byte which is equally likely well beyond the bound of s.

解决方法:

字符串一定以 \0 结尾

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广