添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
闯红灯的勺子  ·  中信证券 CITIC Securities·  1 月前    · 
挂过科的山寨机  ·  Cheers Card ...·  2 月前    · 
叛逆的单车  ·  可再生能源认证·  2 月前    · 
叛逆的苦瓜  ·  Página de buscas do ...·  3 月前    · 
一个C++动态库在Windows上运行正常,但在Ubuntu64位虚拟机中,当涉及std::map和std::set时,变量显示为无法访问,调用find()、insert()等接口会崩溃。通过逐步排查,发现是某个包含#pragma pack(x)的头文件导致字节对齐问题。在头文件前后添加#pragma pack(push)和#pragma pack(pop)解决了问题,但在Windows下未出现此问题。 摘要生成于 ,由 DeepSeek-R1 满血版支持,
  • 2、修改cmakelists.txt,发现也没有什么可以改的,能改的怎么改结果都一样
  • 3、最笨的办法之一用上,写一段这样的代码:
  • 4、面向互联网大法编程,百度、微软必应(不翻墙,不能狗狗),发现一个帖子,缩小有问题代码的范围,于是
  • 5、最笨的办法之二用上,缩小so代码范围
  • std::map、std::set崩溃的终极原因
  • 在一个动态库里使用了std::map和std::set,在windows上用VS2010调试一切正常。但在linux下,用的是Ubuntu64位虚拟机调试,编译链接都OK,但只要调到这个so库里的使用 std::map和std::set 的地方,这些变量在qt调试里都是**<无法访问> ,而且只要调用这些变量的非size()接口,比如 find()、insert()等接口都会导致程序崩溃**。
    郁闷之间。。。。。。

    1、和windows调用比较,没发现任何问题
    2、修改cmakelists.txt,发现也没有什么可以改的,能改的怎么改结果都一样
    3、最笨的办法之一用上,写一段这样的代码:

    typedef map<string, void*> STRMAP;
    STRMAP sm;
    string str = “sdfasf”;
    STRMAP::iterator it = sm.find(str);
    sm.insert(std::make_pair(“fasf”, &sm));
    it = sm.find(str);
    放到可执行程序里调用,没有任何问题;放到so里的接口里的开始,按说单步到string str = “sdfasf”;时,sm应该被初始化,变量里能看到sm的值,但实际上sm的值就是<无法访问>,再往下执行fin