gpt4 book ai didi

c++ - g++ 链接可能尚未编译的 .so 库

转载 作者:行者123 更新时间:2023-11-28 03:41:02 28 4
gpt4 key购买 nike

我正在帮助开发一个 C++ 应用程序。该应用程序非常大,分布在不同的子目录之间。它使用脚本为每个项目目录自动生成 qt .pro 文件,然后使用 qmake 生成 make 文件。目前,这些库正在按字母顺序编译。当它试图链接的库尚未构建时,这显然会导致链接错误。是否有某种 g++ 标志我可以设置,这样如果它的库不会出错尝试链接尚未建立?还是让它首先通过 qt .pro 文件构建依赖关系的方法?

注意:这个脚本在 ubuntu 10.10 上运行良好,因为构建共享库的语句不需要我使用 -l(libraryname) 链接到我的其他库,但 ubuntu 11.10 这样做,它在 11.10 上编译时给我 undefined reference 错误。

最佳答案

您是否考虑过使用 Qt Creator 作为构建环境和 IDE?我个人从未在 Ubuntu 上使用它进行开发,但我在 Windows 上用 g++ 使用过它,并且在那里工作得很好。它似乎已经可以作为 package in the repository 使用了.

使用它获得的一些优势是:

  • Qt Creator(通常)会为您管理 .pro 文件。 (如果您像我一样,仍然可以在此处添加很多额外的内容,但它会在将 .cpp、.h 和 .ui 文件添加到项目时自动添加它们。)
  • 您可以设置项目间依赖关系,这些依赖关系将按照需要链接的任何顺序构建项目。
  • 您可以使用它与 gdb 的集成来单步执行和调试代码,以及跳转到代码。
  • 您可以获得 Qt 信号和槽的自动完成功能,以及内联语法突出显示和一些错误检查功能。
  • 如果您正在开发 GUI,则可以使用集成设计器以可视化方式布局和设计您的表单。

回到您的实际问题,我认为当链接失败时标志不可能告诉 gcc 不要出错,这仅仅是因为链接器无法延迟链接库。如果它链接到静态库 (.a),那么它需要能够将该代码的实现实际复制到可执行文件/库中。如果它是动态链接(.so),它仍然需要验证库中是否确实存在所需的函数。如果在链接的时候链接不上,什么时候可以链接?

事后想想,如果你的编译过程中存在循环依赖(A 依赖于 B,B 依赖于 C,C 依赖于 A),那么你可能需要先构建一个假版本的库,它只有每个函数的实现的空 stub ,以及每个类或对象的完整定义。然后,在链接到它的同时构建其他所有内容,最后,构建假库的真实版本,并将其链接到已经链接的所有其他版本。不过,我认为这只适用于动态链接。

关于c++ - g++ 链接可能尚未编译的 .so 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com