我正在尝试使用Linaro-Toolchain 7.1.1静态交叉编译ARM的应用程序。最终的elf文件依赖于两个共享对象。我需要静态编译应用程序,因为我的目标系统上没有可用的依赖项(例如libstdc ++)。 -L和-I标志位于makefile中,一切正常,没有-static标志。但是,当我使用-static标志时,我的linaro-linker告诉我它无法找到依赖项,即使我知道它们存在于liba.so和libb.so中。任何帮助或指向文学的人都会受到赞赏,我觉得我并不完全理解什么是静态的,尽管我在网上进行了研究。
由于
答案 0 :(得分:0)
感谢您的评论,我能够解决我的问题并理解我为什么会这样做。 正如用户RPGillespie所提到的,-static标志需要对象的归档(libx.a)版本,因此我必须使用linaro工具链中的ar-tool将.o文件编译为.a文件。
此外,正如用户RPGillespie所指示的那样,我必须在g ++命令中使用-l:libx.a而不是-lx指定存档x。
我花了一些时间才注意到如果x.a文件不存在,链接器将动态链接。在我的makefile中,可执行文件是在x.a文件可用之前编译的(因为我刚修改了用于构建x.so的makefile)。