为啥我们通过链接阶段仍然错过符号?

Posted

技术标签:

【中文标题】为啥我们通过链接阶段仍然错过符号?【英文标题】:How come we pass the linking stage and still miss symbols ?为什么我们通过链接阶段仍然错过符号? 【发布时间】:2010-12-14 05:22:55 【问题描述】:

操作系统:AIX 5.3。 编译器:xlC_r

构建系统是:“Unix Makefiles”

我们的应用程序使用多个静态 (.a) 库和多个共享 (.so) 库。 构建过程成功通过(我们确实收到了一些重复的符号警告)。 但是当我们尝试执行时,会出现符号丢失错误。

注意:我们不使用 dl 在运行时加载共享库。

我们错过了什么吗?

为什么我们通过链接阶段仍然错过符号?

【问题讨论】:

有几个可能的原因,它们都很难解释。请提供更多详细信息:缺少哪些符号,以及它们在(静态)链接时定义的位置。用于链接的命令行也可能会有所帮助。 还要记住,与其他 Unix/Linux 相比,AIX 对 .a 和 .so 的含义不同。 【参考方案1】:

动态符号会在链接时被检查,因此如果您在执行时遗漏了某些内容,那么任何动态库或其依赖项都可能不在正确的路径中。

【讨论】:

【参考方案2】:

共享库可能依赖于它们在运行时找不到的其他共享库。

确保您的环境设置正确,以便 dlopen() 知道在哪里查找其他共享库。

【讨论】:

以上是关于为啥我们通过链接阶段仍然错过符号?的主要内容,如果未能解决你的问题,请参考以下文章

CompletableFuture:为啥我们需要阶段?

S5PV210-uboot源码分析-第一阶段

为啥 Spark 选择在 shuffle 阶段通过网络发送数据,而不是写入 HDFS 上的某个位置?

为啥我在 XCode 项目中看不到我的构建阶段选项卡?

我由Angular转向React,为啥

Alpha阶段项目复审