【问题标题】:Static Linking error静态链接错误
【发布时间】:2014-06-19 14:56:20
【问题描述】:

我的平台是intel xeon系统下的RHEL 4.6。我的编译器是 gcc 4.2。所有应用程序都是使用 C 开发的。

让我们假设我有一个例程 ( A ),我在其中进行调用,它包含在库 L 中。现在我使用静态链接库 L 与我的例程 A 创建了一个新库。让我们将此新库称为N.

现在有 3 个不同的应用程序,分别称为 X、Y 和 Z。所有 3 个应用程序都需要与新库 N 链接。

我尝试将这 3 个应用程序与库 N 链接(静态)。但是在链接时,如果我不包含 L,为什么编译器会再次给出链接错误。我当时已经包含了 L做N的原因。为什么还要单独期望L。

【问题讨论】:

  • 我读到了这个link,它通过链接、制作。 (也许会有所帮助)简而言之,所有构建步骤都需要存在(并引用)要链接的文件。如果使用一个,则在运行时只需要存在 .dll(即,那时不再需要静态库)
  • 您可能想阅读例如:stackoverflow.com/questions/3821916/…
  • 谢谢 ryyker 和 wojciii

标签: c linux static linker


【解决方案1】:

它仍然需要构建库。仅仅因为您构建了 N 并不意味着它会将 L 放入其中。它只是对它的引用。它仍然需要 L 才能获得运行的可执行文件。顺便说一句,像这样构建依赖于其他库(至少是其他静态库)的库并不是一个好主意。

【讨论】:

  • Jim 为什么静态链接在 N 中仍然只有对 L 的引用。大修整个场景要求太高,实际上是不可能的。有没有办法解决这个问题?
  • 库只是一个对象,包含已编译的例程。它无法包含(编译)来自另一个库的代码。也许您可以将 N 和 L 的例程重建为一个大型库?我不知道为什么您可以访问 L 来构建 N,但​​以后不能。此外,您也许可以使用动态库走得更远,但归根结底,您仍然需要它们来运行可执行文件。
猜你喜欢
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多