【问题标题】:linaro compiler cannot find library when adding -static添加 -static 时 linaro 编译器找不到库
【发布时间】:2018-05-01 15:46:31
【问题描述】:

我正在尝试使用 Linaro-Toolchain 7.1.1 静态交叉编译适用于 ARM 的应用程序。最终的 elf 文件依赖于两个共享对象。我需要静态编译应用程序,因为我的目标系统(例如 libstdc++)上没有可用的依赖项。 -L 和 -I 标志在 makefile 中,并且在没有 -static 标志的情况下一切正常。但是,当我使用 -static 标志时,我的 linaro-linker 告诉我它找不到依赖项,即使我知道它们作为 liba.so 和 libb.so 存在。感谢任何帮助或指向文献,我觉得我没有完全理解 -static 的作用,尽管我在网上进行了研究。

谢谢

【问题讨论】:

  • 提供文字诊断文本,以及执行的编译和链接器命令。我无法帮助你,但其他人可以。
  • 您需要库的.a 版本来静态链接,而不是.so 版本。如果您有.so 版本,为什么不将它们复制到目标设备以及二进制文件?
  • 不清楚你在问什么。您似乎想知道为什么您无法静态链接您的库。我建议为您的问题添加一些格式,并提供一些有关您尝试过的内容的详细信息。

标签: c++ static arm shared-libraries cross-compiling


【解决方案1】:

感谢您的 cmets,我能够解决我的问题并理解我为什么遇到它。 正如用户 RPGillespie 所提到的,-static 标志需要对象的存档 (libx.a) 版本,因此我必须使用 linaro 工具链中的 ar 工具将 .o 文件编译为 .a 文件。

此外,正如用户 RPGillespie 所指的那样,我必须在 g++ 命令中使用 -l:libx.a 而不是 -lx 来指定档案 x。

我也花了一些时间注意到如果 x.a 文件不存在,链接器将动态链接。在我的 makefile 中,可执行文件是在 x.a 文件可用之前编译的(因为我刚刚修改了用于构建 x.so 的 makefile)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多