c++ - 将 undefined reference 错误限制为仅直接依赖

标签 c++ linker shared-libraries linker-errors undefined-reference

我在 Linux 上使用其他人共享的项目并使用 qt creator 进行开发。

问题是我多次遇到链接错误,尤其是因为发生了这种情况:

libA uses libB -> libA must link to libB

libC uses libA -> libC must link to both libA and libB

appZ uses libC -> appZ must link to libC, libA and libB

对我来说,理想的情况是在我的 appZ .pro 文件中我只需要写:“链接到 libC”,然后它会自动获取其他依赖项。

这是因为经常有人更改其中一个库的依赖项,并且许多难以修复的链接问题来打招呼..

有没有办法设置qt creator只指定最直接的依赖关系,如果有,有什么缺点吗?其他选择?

我正在调查链接标志 --no-undefined 但仍然不明白这是否对我有帮助。

[编辑] 澄清一下,问题是如果 100 个应用程序使用 libC,如果 libC 或其依赖项之一必须链接到新库,这将成为一个大问题。所有应用程序都必须更改,否则它们会出现链接问题.我只是在寻找一种方法来限制这个问题

最佳答案

链接是一个广泛的话题,通常需要大量的时间和经验才能理解所有内容。

要回答您的问题,没有人会在一夜之间更改库或 so 文件的依赖项。即使它们发生变化,它们也会提供以前的版本和新版本,并且它们提供与该库的以前版本的向后兼容性(这意味着旧的 api 可以工作)。如果他们添加了一些新的依赖项以提供新的支持或功能,他们会详细提供您需要哪些新的 so 文件以及如何构建该新库。

在许多情况下,如果您不需要任何新支持,请使用该库本身的旧版本。但通常新库会修复一些错误,最好还是使用新版本。

我们使用库来减少我们的工作量,但令人惊讶的是,我们增加了一些工作量来构建第三方库,跟踪这些库中的更改和错误,解决链接错误等。遗憾的是,与库打交道并不容易比较 Java 或 npm 中的大小写。

我所做的是在 Linux 中编写一个脚本来跟踪所有事情。但是该脚本本身并不是自动化的,但它减少了我的大部分工作量。我认为您也可以做类似的事情。

Just to clarify, problem is that if 100 apps use libC, it becomes a big problem if libC or one of its dependencies must link to a new library.. all the applications must be changed or they have linking problems. I am just looking for a way to limit this problem

在这种情况下很容易,只需在构建机器中构建新库,并在 LD_LIBRARY_PATH 中提供文件路径。我知道这并不像说的那么容易,但是如前所述,与 Java 或 npm 相比,处理库并不容易。您可能还必须在用于维护构建的脚本中进行一些编辑。我看不到任何捷径。

关于c++ - 将 undefined reference 错误限制为仅直接依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54941855/

相关文章:

c++ - 在 C++ 中是否有等效的 Java equals 方法?

macos - 我如何告诉链接器使用方法的多个实现中的哪一个?

无法链接到 macOS 上的 C 标准库

c++ - 什么时候应该存储函数的引用或指针?

c++ - vc++2008 安装程序项目 msvcrt.dll

c++ - 理解歧义解决的示例代码

python - 尝试编译 The Powder Toy 时出现链接错误

gcc - 如何设置共享库的动态链接器路径?

c++ - 是否可以将 Debug模式编译的库链接到 Release模式的项目?

c - 如何从.so文件中提取C源代码?