c++编译后拷贝到其他服务器无法运行

c++ 编译后拷贝到其他电脑无法运行问题排查
问题描述
docker打包运行 但镜像拷贝到其他服务器无法运行 在自身服务器能够运行,其他服务器自己打包也是能运行
在程序中加上日志信息 定位到某对象的构造函数
怀疑是dll的问题,将每个dll对比,没啥问题
怀疑可能docker的问题 ,将问题拷贝到服务中运行 还是无法运行 错误码Illegal instruction
使用ulimit -c unlimited 抓取dump包,gdb调试 ,发现卡在了一个不可能出错的位置,继续分析堆栈信息,最终是在mutex的构造函数中

 通过objdump  分析汇编 mutex_base处代码,未找到有效信息

判断可能和std对应的so文件有关 ,尝试 ,失败

继续对错误码分析 根据文档https://www.cnblogs.com/arnoldlu/p/10815908.html
排查问题 看了下uname -a 都是x86架构的64位系统
继续查找问题 想到之前为了调试 开了符号链接,
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -rdynamic -march=native -O2 -ftemplate-depth-1000")
将改行注释,尝试运行 还是同样错误
继续排查 思考是否是cpu指令集存在问题 通过 cat /proc/cpuinfo |grep flags 查看不同服务器的该参数,看不懂 ,但是存在不同
使用 gcc -march=native -Q --help=target |grep march 继续查看 只要一个参数 且128服务器 和其他不同为knl 其他服务器为haswell 查询这个是二种cpu架构,判断可能和这有关
修改cmakefile中CMAKE_CXX_FLAGS 将-march=native 改为-march=haswell 验证 能够运行

确定是cpu架构不同导致的问题

参考资料
https://zhidao.baidu.com/question/1801074088485408387.html
https://blog.csdn.net/weixin_30853329/article/details/96845540
https://blog.csdn.net/qq_41565459/article/details/82991691

原文地址:https://www.cnblogs.com/skycandy/p/13078118.html