将未定义的参考错误限制为仅直接依赖性
Limit undefined reference errors to only direct dependencies
i在Linux上开发了其他人共享的项目并使用QT Creator。
问题是我链接错误了很多次,尤其是因为这发生了:
liba使用libb->liba必须链接到libb
libc使用liba->libc必须链接到liba和libb
appz使用libc->Appz必须链接到LIBC,LIBA和LIBB
对我而言,理想是在我的appz .pro文件中,我必须写:"链接到libc"。然后自动获得其他依赖项。
这是因为经常会发生某人改变其中一个libs的依赖关系,并且很难解决链接问题。
是否有任何方法可以通过某种方式设置QT创建者,以指定最直接的依赖性,如果是,是否有缺点?其他一些选择?
我正在调查链接标志--no-undefined
,但仍然不明白这是否会对我有所帮助。
[编辑]只是为了澄清,问题是,如果100个应用使用libc,则如果LIBC或其依赖项之一必须链接到新库,则将成为一个大问题。.所有应用程序必须更改或它们有链接问题。我只是在寻找限制此问题的方法
Well链接是主题的广泛领域,通常需要大量的时间和经验来理解所有内容。
要回答您的问题,没有人会在一夜之间更改库或库文件的依赖关系。即使它们更改,它们也提供了以前的版本以及新版本,并且它们与该库的先前版本提供了向后的兼容性(这意味着旧的API将起作用)。如果他们添加了一些新的依赖性来提供新的支持或功能,他们将详细提供您需要的新文件以及如何构建新库。
在许多情况下,如果您不想要任何新的支持,请使用该库本身的旧版本。但是通常新库有一些错误修复,最好选择新版本。
我们使用库减少工作量,但是令人惊讶的是,我们增加了一些工作量来构建第三方库,跟踪这些库中的更改和错误,解决链接错误等。可悲的是,与库打交道并不那么容易。在Java或NPM中进行比较。
我要做的是在Linux中编写一个脚本,该脚本跟踪所有内容。但是该脚本本身不是自动化的,但它减少了我的大部分工作量。我认为您也可以做类似的事情。
只是为了澄清,问题是,如果100个应用使用LIBC,则如果LIBC或其依赖项之一必须链接到新库,则将成为一个大问题。.所有应用程序必须更改或它们链接问题。我只是在寻找一种限制此问题的方法
在这种情况下,很容易,只需在构建计算机中构建新库,然后在ld_library_path中提供SO文件路径。我知道这并不容易,但是如前所述,在Java或npm中,与图书馆打交道并不容易。您可能还必须在脚本中进行一些编辑,以维护构建。我看不到任何快捷方式。
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 将未定义的参考错误限制为仅直接依赖性