我有一个常见的场景:可执行文件的一些源文件依赖于一些标准库和一些用户库。所有用户库都静态链接到可执行文件,而标准库则动态链接到它。
问题:我相信我的完整包中有多个定义的符号(可执行文件已经包含用户库代码+共享标准库)。链接器显然对它有洞察力,但据我了解,除非遇到多个强命名符号,否则链接器不会抱怨。我担心的是,当我将代码从 solaris 8/sparc 平台移动到 solaris10/sparc 平台时,一些标准的 unix 函数已经在用户库中实现,这会导致应用程序在运行时崩溃。请注意,该应用程序在 solaris 8/sparc 平台上运行良好
我一直面临着奇怪的问题,这让我相信这可能是源头
- 修改一个库中的一个变量正在更改另一个库中另一个变量的值
- Solaris 8-10:host2ip 转换问题
我需要的:
有没有办法轻松列出所有多重定义的符号?- 有没有办法轻松列出源自用户库的所有多重定义符号?
- 你们认为问题 #1 可能是由链接问题引起的,还是您认为这可能是其他问题的迹象?
Edit1:从那时起,我知道在使用 ld 生成地图文件时,它有一段多重定义的符号,我将通过它来查找看起来像标准库调用的名称。对于不知道的人,链接器只有在找到多个具有相同名称且名称是强名称的符号时才会链接失败。