c – gcc5.2 abi更改 – >兼容性保证?
发布时间:2020-12-16 06:50:28 所属栏目:百科 来源:网络整理
导读:我有以下情况(Ubuntu 15.10和Debian测试) 我有一个没有cxx11编译的Lib A和一个使用-std = c 11的lib B. B包含和A的链接,A使用boost. 如果我将B链接到A,则在dynload期间A创建的应用程序崩溃. 如果我编译A没有cxx11或B与cxx11一切正常. 我的问题:到目前为止我
我有以下情况(Ubuntu 15.10和Debian测试)
我有一个没有cxx11编译的Lib A和一个使用-std = c 11的lib B. B包含和A的链接,A使用boost. 如果我将B链接到A,则在dynload期间A创建的应用程序崩溃. 我的问题:到目前为止我理解ABI名称空间添加应该保证这样的问题.我错了吗? 我创建了一个示例项目来澄清问题: GDB告诉我: Program received signal SIGSEGV,Segmentation fault. 0x00007ffff7bceb2e in _GLOBAL__sub_I_Lib.cpp () from ./libmyLib.so (gdb) bt #0 0x00007ffff7bceb2e in _GLOBAL__sub_I_Lib.cpp () from ./libmyLib.so #1 0x00007ffff7deaa0a in call_init (l=<optimized out>,argc=argc@entry=1,argv=argv@entry=0x7fffffffe688,env=env@entry=0x7fffffffe698) at dl-init.c:78 #2 0x00007ffff7deaaf3 in call_init (env=0x7fffffffe698,argv=0x7fffffffe688,argc=1,l=<optimized out>) at dl-init.c:36 #3 _dl_init (main_map=0x7ffff7ffe1a8,env=0x7fffffffe698) at dl-init.c:126 #4 0x00007ffff7ddd1ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2 #5 0x0000000000000001 in ?? () #6 0x00007fffffffe89f in ?? () #7 0x0000000000000000 in ?? () Valgrind的结果: goldhoorn@debian:/tmp/example$LD_LIBRARY_PATH=. valgrind --show-below-main=yes ./main ==17140== Memcheck,a memory error detector ==17140== Copyright (C) 2002-2015,and GNU GPL'd,by Julian Seward et al. ==17140== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==17140== Command: ./main ==17140== ==17140== ==17140== Process terminating with default action of signal 11 (SIGSEGV) ==17140== Bad permissions for mapped region at address 0x401FE8 ==17140== at 0x4E3EB2E: _GLOBAL__sub_I_Lib.cpp (in /tmp/example/libmyLib.so) ==17140== by 0x400EA09: call_init.part.0 (dl-init.c:78) ==17140== by 0x400EAF2: call_init (dl-init.c:36) ==17140== by 0x400EAF2: _dl_init (dl-init.c:126) ==17140== by 0x40011C9: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so) ==17140== ==17140== HEAP SUMMARY: ==17140== in use at exit: 72,704 bytes in 1 blocks ==17140== total heap usage: 1 allocs,0 frees,72,704 bytes allocated ==17140== ==17140== LEAK SUMMARY: ==17140== definitely lost: 0 bytes in 0 blocks ==17140== indirectly lost: 0 bytes in 0 blocks ==17140== possibly lost: 0 bytes in 0 blocks ==17140== still reachable: 72,704 bytes in 1 blocks ==17140== suppressed: 0 bytes in 0 blocks ==17140== Rerun with --leak-check=full to see details of leaked memory ==17140== ==17140== For counts of detected and suppressed errors,rerun with: -v ==17140== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) Segmentation fault 解决方法
请根据Cxx11 ABI向后不兼容性列表检查您的库A:
https://gcc.gnu.org/wiki/Cxx11AbiCompatibility
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |