火锅配咖啡 2025-01-07 10:45 采纳率: 0%
浏览 70
已结题

Linux环境下openssl报错

Linux环境下,我的程序A用到了第三方库B,第三方库B依赖于openssl.1.0.2.k-flips。我在做A用第三方库C的时候,只要把C的动态库和(A+B的库)一起编译,运行的时候就会报如下的段错误。
C单独编译执行是没问题的。
A+B单独执行也是没问题的。

有xd能帮忙解决么?或者提供解决思路

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff6034d00 in pthread_mutex_lock () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install glibc-2.17-326.el7_9.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.15.1-55.el7_9.x86_64 libcom_err-1.42.9-19.el7.x86_64 libgcc-4.8.5-44.el7.x86_64 libselinux-2.5-15.el7.x86_64 libstdc++-4.8.5-44.el7.x86_64
(gdb) bt
#0  0x00007ffff6034d00 in pthread_mutex_lock () from /lib64/libpthread.so.0
#1  0x00007ffff1f5a7d8 in ?? () from /usr/local/lib64/third/lib64/libssh.so.4
#2  0x00007ffff1f5a8db in ?? () from /usr/local/lib64/third/lib64/libssh.so.4
#3  0x00007ffff18efce9 in CRYPTO_mem_ctrl () from /usr/local/lib64/third/lib64/libcrypto.so.10
#4  0x00007ffff18f204e in OBJ_NAME_init () from /usr/local/lib64/third/lib64/libcrypto.so.10
#5  0x00007ffff18f23f9 in OBJ_NAME_add () from /usr/local/lib64/third/lib64/libcrypto.so.10
#6  0x00007ffff19b1c15 in EVP_add_cipher () from /usr/local/lib64/third/lib64/libcrypto.so.10
#7  0x00007ffff19b670d in OpenSSL_add_all_ciphers () from /usr/local/lib64/third/lib64/libcrypto.so.10
#8  0x00007ffff19b63ce in OPENSSL_add_all_algorithms_noconf () from /usr/local/lib64/third/lib64/libcrypto.so.10
#9  0x00007ffff1f5fff4 in ?? () from /usr/local/lib64/third/lib64/libssh.so.4
#10 0x00007ffff1f30211 in ?? () from /usr/local/lib64/third/lib64/libssh.so.4
#11 0x00007ffff1f3026d in ?? () from /usr/local/lib64/third/lib64/libssh.so.4
#12 0x00007ffff7dea9c3 in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2
#13 0x00007ffff7ddc17a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#14 0x0000000000000001 in ?? ()
#15 0x00007fffffffdfa4 in ?? ()
#16 0x0000000000000000 in ?? ()

  • 写回答

41条回答 默认 最新

  • 檀越@新空间 2025-01-07 10:45
    关注
    获得0.15元问题酬金

    上午好☀️☀️☀️️
    本答案参考通义千问

    从提供的信息来看,问题似乎与多个库之间版本不兼容或符号冲突有关。具体来说,可能是因为libcrypto.so.10的不同版本被加载到同一个进程中,导致了段错误。以下是一些可能的解决方案:

    1. 检查库的版本和路径

      • 确认所有相关库(包括libssh.solibcrypto.so)是否都指向正确的版本。
      • 使用ldd命令查看程序A、C以及它们所依赖的库的实际链接情况。
      ldd /path/to/your/executable
      
    2. 使用独立的环境

      • 创建一个独立的环境(例如通过virtualenvconda),确保每个库都在一个隔离的环境中安装和运行。
    3. 指定库的路径

      • 如果必须同时使用不同版本的库,可以尝试设置LD_LIBRARY_PATH来控制库的搜索路径。
      export LD_LIBRARY_PATH=/path/to/correct/library:$LD_LIBRARY_PATH
      
    4. 静态链接

      • 尝试将依赖的库静态链接到你的可执行文件中,以避免运行时的库冲突。
      gcc -o your_program your_source.c -L/path/to/your/lib -lB -lC -static
      
    5. 检查符号冲突

      • 使用nmobjdump工具检查库中的符号,确认是否有重复或冲突的符号。
      nm -D /path/to/libcrypto.so.10 | grep 'T '
      
    6. 更新或重新安装库

      • 确保所有依赖库都是最新且兼容的版本。有时,更新库可以解决版本不匹配的问题。
    7. 使用调试器进一步分析

      • 使用GDB进一步分析崩溃点附近的调用栈,以获取更多线索。
      gdb ./your_program core
      (gdb) backtrace
      

    通过以上步骤,你应该能够更好地诊断和解决段错误问题。如果问题仍然存在,建议提供更多的环境信息(如操作系统版本、库的具体版本等),以便更精确地定位问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月15日
  • 赞助了问题酬金15元 1月7日
  • 创建了问题 1月7日