为啥我们通过链接阶段仍然错过符号?
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() 知道在哪里查找其他共享库。
【讨论】:
以上是关于为啥我们通过链接阶段仍然错过符号?的主要内容,如果未能解决你的问题,请参考以下文章