编译运行错误排查方法 柔光的暖阳◎ 2023-08-17 15:39 79阅读 0赞 目录 * 编译时头文件找不到 * 编译时符号找不到 * 编译时库找不到 * 运行时库找不到 * 运行时库搜索路径顺序 * 运行时库搜索路径查看 * 不同工具链适配时符号找不到 * 不同工具链编译出的程序运行出错 * 参考 # 编译时头文件找不到 # * 编译flags -v,显示所有头文件搜索路径 * 宏是否打开 * 编译flags是否指定了-I路径 * 头文件中加\#error "xxxx",如果该头文件被编译到,则会报错 # 编译时符号找不到 # * 源文件/头文件是否被编译进去了 * 该符号是否是extern的 * 用c++编译,是否加了extern "C" * 是否有宏没有打开 * 是否存在头文件交叉包含 # 编译时库找不到 # * 链接flags -v, 显示所有库搜索路径 * 链接flags是否指定了-L路径 * \-L路径下是否存在该库 * 默认的动态库搜索路径 /lib, /usr/lib, /usr/local/lib等是否存在该库 * 库是否和当前工具链不一致 # 运行时库找不到 # ## 运行时库搜索路径顺序 ## 1. 链接时,-Wl,-rpath=first\_path:second\_path指定的动态库搜索路径 2. 环境变量LD\_LIBRARY\_PATH指定的动态库搜索路径 3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径 4. 默认的动态库搜索路径/lib, /usr/lib ## 运行时库搜索路径查看 ## * ldd program\_name (ldd是个shell脚本) ldd ./exe_json linux-vdso.so.1 => (0x00007ffdfd3ed000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2441ae6000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f24417dd000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2441413000) /lib64/ld-linux-x86-64.so.2 (0x00007f2441d03000) * strace -e trace=open program\_name (部分嵌入式linux系统编译固件时,没有开这个功能) strace -e trace=open ./exe_json open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 +++ exited with 0 +++ # 不同工具链适配时符号找不到 # * 不同工具链对某些符号的定义用宏控制 eg:struct sockaddr_in结构体需要开启的宏 - linux PC: -D_GNU_SOURCE - linux rk3308: -D_POSIX_C_SOURCE=200112L -D_DEFAULT_SOURCE # 不同工具链编译出的程序运行出错 # * 大小端 * 32位/64位 * \-O2优化导致的错误(比如网络通信时mbedtls报加解密错误),改成-O0 # 参考 # * ldd原理 [https://www.cnblogs.com/kelamoyujuzhen/p/9823272.html][https_www.cnblogs.com_kelamoyujuzhen_p_9823272.html] * \-rpath-link参数作用 [https://blog.csdn.net/q1302182594/article/details/42102961][https_blog.csdn.net_q1302182594_article_details_42102961] 转载于:https://www.cnblogs.com/pukaifei/p/11280270.html [https_www.cnblogs.com_kelamoyujuzhen_p_9823272.html]: https://www.cnblogs.com/kelamoyujuzhen/p/9823272.html [https_blog.csdn.net_q1302182594_article_details_42102961]: https://blog.csdn.net/q1302182594/article/details/42102961
相关 错误排查:Java中编译错误和运行时异常示例 在Java编程中,我们可能会遇到两种类型的错误:编译错误和运行时异常。 1. **编译错误**: - **类型不匹配**:例如,你试图将一个字符串与一个整数相加,但Ja Bertha 。/ 2024年09月16日 06:04/ 0 赞/ 8 阅读
相关 错误排查:Java程序中经常遇到的编译和运行错误实例 在Java编程中,可能会遇到各种编译和运行错误。以下是一些常见的实例: 1. **语法错误**: ```java public void myMethod() { 向右看齐/ 2024年09月15日 08:24/ 0 赞/ 9 阅读
相关 错误排查:Java语言中常见编译、运行时错误示例 在Java编程过程中,常见的编译和运行时错误有很多。以下是一些例子: 1. **语法错误**: - 括号不匹配(如`if (true) { ... } else { . 野性酷女/ 2024年09月11日 19:18/ 0 赞/ 116 阅读
相关 编译运行错误排查方法 目录 编译时头文件找不到 编译时符号找不到 编译时库找不到 运行时库找不到 运行时库搜索路径顺序 运行时库搜索路 柔光的暖阳◎/ 2023年08月17日 15:39/ 0 赞/ 80 阅读
相关 0630编译运行时错误 写好一个程序`不容易`:先要找`材料,资源`.再`安排`程序`思路`结构,再`写代码`,最后`编译时/运行时`错误查找. 1,`d=看();i=一符型(d);`,这里只记得 素颜马尾好姑娘i/ 2022年10月11日 12:25/ 0 赞/ 186 阅读
相关 MapReduce排查错误日志方法 初学者运行MapReduce作业时,经常会遇到各种错误,由于缺乏经验,往往不知所云,一般直接将终端打印的错误贴到搜索引擎上查找,以借鉴前人的经验。然而,对于hadoop而言,当 骑猪看日落/ 2022年04月11日 12:58/ 0 赞/ 491 阅读
相关 Lua基础 编译、运行、错误处理 尽管Lua是一门解析型的语言,但是在运行前也会被编译成某个中间状态。一门解析型的语言需要编译,这听起来有点不合常理。但是,实际上,解析型语言的与众不同,不是说它不需要编译,而是 你的名字/ 2022年03月17日 09:44/ 0 赞/ 365 阅读
相关 错误 运行错误 编译错误 【一】错误: 指程序运行时遇到的硬件错误,或者操作系统、虚拟机等系统软件错误或操作错误。 java.lang.Error是错误类,产生错 水深无声/ 2021年09月16日 01:18/ 0 赞/ 463 阅读
相关 tensorflow serving 编译 运行 nccl错误 由于自己编译,版本很重要。package下载出错时,多运行几遍。 bazel安装: bazel 0.16.1 bash bazel-0.16.1-installer-... 梦里梦外;/ 2021年05月19日 15:21/ 0 赞/ 527 阅读
还没有评论,来说两句吧...