- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我处理的问题案例中,我想了解 Linux 机器上的动态链接器/加载器行为。
我们崩溃的代码作为插件加载 (dlopen(libwrapper.so, RTLD_GLOBAL))。 libwrapper.so 只是一个薄层,它加载了另一个插件来完成真正的工作。这些插件可以命名为:P1 和 P2,它们中的每一个都依赖于名为 F 的公共(public)库(所有这些都非常简化)。
Wrapper (libwrapper.so) 被引入以允许在没有 RTLD_GLOBAL 的情况下加载 Pn,因为该标志集会导致加载 Pns 时出现明显的链接问题(它们具有相同的 API)。 RTLD_DEEPBIND 不是一个选项,因为目标平台太旧 - 不支持它。
令我们惊讶的是,问题在 P2 加载时出现在 F 库中(当 P1 已经加载(并初始化)并且 F 作为其隐式依赖项时)。在显式加载 P2 时 (dlopen(libP2.so, RTLD_LOCAL | RTLD_NOW)),动态链接器报告没有问题,但是调用 F 中的代码以实例化 F 中定义的某些类型实例(再次)导致在各个地方出现段错误(万一一个被跳过/注释掉,它会在另一个地方崩溃——因此没有花时间调查可能有问题的代码模式,因为怀疑有更普遍的问题/误解)。没有使用内联函数,代码与 -Wl、-E 链接,默认可见性,GCC 是 3.4.4..F 代码非常稳定,在独立应用程序中使用或过去作为插件的一部分。
我想将 F 链接为静态库以解决动态链接器可能存在的任何问题,但结果是一样的。
我对这个话题的看法:
关于使代码至少工作的解决方法的假设:
如果我对这个主题的看法有误/过于简化/遗漏重要部分,我将不胜感激?这是过去已知的 GCC/binutils 错误吗?
最佳答案
My view on the topic:
你对题目的看法是错误的;但没有办法向您证明这一点。
编写一个最小的测试用例来模拟您的系统所做的事情,并且仍然以类似的方式崩溃。用实际损坏的代码更新您的问题;然后我们可以确切地告诉您问题出在哪里。
还有一个很好的机会,将问题简化为最小的例子,您自己就会发现问题所在。
无论哪种方式,您都会理解问题,并且会学到新东西。
关于linux - 第二次插件崩溃时再次引用代码段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625445/
我在互联网上搜索了很多小时,但没有找到满意的结果,所以 -VSTO Addin 和 COM Addin(我们作为类库项目制作并使用 Excel 对象)之间有什么区别?VSTO 项目是否有任何限制,例如
我在互联网上搜索了很多小时,但没有找到满意的结果,所以 -VSTO Addin 和 COM Addin(我们作为类库项目制作并使用 Excel 对象)之间有什么区别?VSTO 项目是否有任何限制,例如
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在寻找有关如何构建可扩展 WCF 服务器(具有动态加载的服务)的建议,最好使用 System.Addins 或 MEF。 服务器应托管实现最小“插件”API(StartService/StopSe
有没有一种方法可以使用加载浏览器扩展/插件/插件的 headless 浏览器(即 PhantomJS、Selenium)来运行自动测试? 更具体地说,我想模拟广告拦截器(如 Ghostery、ad-b
我是 gradle 的新手,我使用 artifactory 作为我的 repo 服务器。我在网上查看了如何将我的项目发布到我的 repo 服务器,发现我可以使用 maven-publish 或使用 a
我想禁用某些状态的点击/事件,并仅使少数状态可点击。我通读了http://newsignature.github.io/us-map/处的文档,并且找不到与此问题相关的任何内容。 最佳答案 http:
据我了解,在Intellij中使用idea插件打开Maven构建的项目并不是最好的方法,即调用: mvn idea:idea 但是直接打开pom文件(Intellij有默认的Maven插件);同样的事
使用Artifactory plugin对于 Jenkins pipeline 来说是一种幸福,只要遵循文档就可以了。但后来我介绍了Maven Flatten plugin解析父模块和子模块 mvn
我已经安装了Elasticsearch版本1.7.1。一切正常。我也安装了 JDBC 驱动程序。检查下面我的插件文件夹 目录E:\Xampp\htdocs\my-elastic\elasticsear
在我使用 webpack common chunks 插件创建包含第三方库(如 angular、react、lodash 等)的 vendor 包之前,但后来我知道了 webpack dll
我们正在尝试使用(Jenkins、sonar、eclipse ...)安装 CI 平台。 为了让每个开发人员都可以在提交之前对他的代码进行分析,我想知道两种选择: 使用 Sonar 插件运行本地分析。
我知道这是一个比较特殊的问题。尽管如此,也许有些人知道这一点: 我想在 Eclipse 中使用 Maven 编译 Hector=> 分支:0.7.0 和标签:hector-0.7.0-29(https
我卡住了。我一直在尝试寻找或自己创建一个简单的准系统示例,说明如何为 VS 2010 Express 创建 Outlook 插件。我知道这在 VS 2010 Pro 中更简单,但是,在快速版本中真的不
我有以下排除过滤器来忽略所有 R 文件类: findbugs-exclude-filter.xml 当我将它用于 FindBugs-IDEA 插件时,它可以
我刚开始玩 CakePHP,我发现了 Wildflower CMS .我喜欢这个想法,并打算开始修补它。不过,我有一个问题。 在自述文件中,我发现了以下内容:“Wildflower 不是也不会是 Ca
虽然现在大部分情况都是使用n-api来编写插件,但是底层毕竟是v8(和libuv),使用v8编写简单的插件,同时熟悉v8的使用。 本文介绍在写c++插件时,简单又常用的写法,其实本质上,写插件
本篇是 Python 系列教程第 3 篇,更多内容敬请访问我的 Python 合集 Visual Studio Code的安装非常简单,就不放这里增加文章篇幅了。 相比PyCharm,V
Maven – 插件 什么是 Maven 插件? Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来: 创建 jar 文件 创建 war
我正在编写一个插件来添加带有标签 [deposit_page] 的页面;该标记应替换为一些 PHP 代码。 这就是我所拥有的,但它不起作用。有什么我遗漏或做错了什么吗? function deposi
我是一名优秀的程序员,十分优秀!