添加-static时linaro编译器找不到库

linaro compiler cannot find library when adding -static

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

谢谢

多亏了您的评论,我才能够解决我的问题并理解我遇到问题的原因。 正如用户 RPGillespie 提到的,-static 标志需要对象的存档 (libx.a) 版本,因此我必须使用 linaro 工具链中的 ar-tool 将 .o 文件编译为 .a 文件。

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

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