我已经编译了wget的源代码,这是ftp服务器https://ftp.gnu.org/gnu/wget/,用于将我自己的程序链接到我在编译项目后获得的目标文件之一。但是,在所需文件(具体来说是nm -u
)上运行src/http.o
会给我带来很多需要在链接时解析的名称。
问题1
是否有工具可以找到链接器解析所有符号所需的其他目标文件?手动测试目标文件的每种可能组合似乎都不合理。
问题2
[当我尝试将我的程序与通过编译项目获得的每个可能的目标文件链接时,遇到以下错误-multiple definition
。这是否意味着一般来说,我只需要选择在编译一些项目然后使用它们构建可执行文件后得到的有意义的目标文件子集?
是否存在用于查找链接器解析所有符号的其他目标文件的工具?
没有构造这样的工具并不困难(您希望在依赖图中找到连接的组件),但是问题并不常见。
手动测试目标文件的每种可能组合似乎都不合理。
wget
似乎包含大约100个源文件。使用所有可能的排列,您只需要尝试链接100!
次,这的确是要尝试的组合太多。
正如@kaylum所评论的那样,开发人员并不打算将wget
作为可重用的库,因此即使您尝试了所有可能的组合,也无法保证有解决方案。
还请注意,wget
源中的链接对最终程序施加了许可证限制(您必须在GPLv3下将其释放)。>>
:您自己的程序和[当我尝试将程序与通过编译项目获得的每个可能的目标文件链接时,遇到以下错误-多个定义。
即期望
wget/src/main.c
都定义了main
功能。 无法保证甚至存在满足您要求的子集。这是否意味着一般来说,我只需要选择在编译某些项目然后使用它们构建可执行文件后得到的有意义的目标文件子集?
是。并且通常