提问人:Saturnu 提问时间:3/1/2019 最后编辑:CommunitySaturnu 更新时间:4/5/2019 访问量:115
将未定义的引用错误限制为仅直接依赖项
Limit undefined reference errors to only direct dependencies
问:
我在 Linux 上开发其他人共享的项目并使用 qt creator。
问题是我经常遇到链接错误,特别是因为发生了这种情况:
libA 使用 libB -> libA 必须链接到 libB
libC 使用 libA ->libC 必须同时链接到 libA 和 libB
appZ 使用 libC -> appZ 必须链接到 libC、libA 和 libB
对我来说,理想的情况是,在我的appZ .pro文件中,我必须只写:“链接到libC”,然后它会自动获取其他依赖项。
这是因为经常有人更改其中一个库的依赖项,并且许多难以解决的链接问题来打招呼。
有没有办法将qt creator设置为仅指定最直接的依赖项,如果是,有什么缺点吗?还有其他选择吗?
我正在调查链接标志,但仍然不明白这是否会对我有所帮助。--no-undefined
[编辑]澄清一下,问题是,如果 100 个应用程序使用 libC,如果 libC 或其依赖项之一必须链接到新库,这将成为一个大问题。必须更改所有应用程序,否则它们会出现链接问题。我只是在寻找一种方法来限制这个问题
答:
良好的链接是一个广泛的主题领域,通常需要大量的时间和经验来理解所有内容。
为了回答您的问题,没有人会在一夜之间更改库或其他文件的依赖项。即使它们发生了变化,它们也会提供以前的版本和新版本,并且它们提供与该库的先前版本的向后兼容性(这意味着旧的 api 将起作用)。如果他们添加了一些新的依赖项以提供新的支持或功能,他们会详细提供您需要哪些新的 so 文件以及如何构建该新库。
在许多情况下,如果您不需要任何新的支持,请使用该库本身的旧版本。但通常新库有一些错误修复,最好选择新版本。
我们使用库来减少工作量,但令人惊讶的是,我们增加了一些工作量来构建第三方库,跟踪这些库中的更改和错误,解决链接错误等。可悲的是,在 Java 或 npm 中处理库并不那么容易。
我所做的是在 Linux 中编写一个脚本来跟踪所有内容。但是这个脚本本身不是自动化的,但它减少了我的大部分工作量。我想你也可以做类似的事情。
澄清一下,问题是,如果 100 个应用程序使用 libC,如果 libC 或其依赖项之一必须链接到新库,这将成为一个大问题。必须更改所有应用程序,否则它们会出现链接问题。我只是在寻找一种方法来限制这个问题
在这种情况下很容易,只需在构建机器中构建新库,并在LD_LIBRARY_PATH中提供文件路径即可。我知道这并不容易,但如前所述,与 Java 或 npm 相比,处理库并不那么容易。您可能还需要对用于维护构建的脚本进行一些编辑。我看不出任何捷径。
评论