gcc链接指令中-l参数匹配静态库文件的疑问
GCC
-l 参数匹配库文件的规则解释 这是GCC链接器(ld)的默认命名规则,专门用来简化静态库和动态库的引用:
- 当使用
-lxxx参数时,链接器会自动在-L指定的搜索路径里查找两类文件:- 静态库:
libxxx.a - 动态库:Linux下为
libxxx.so,macOS下为libxxx.dylib,Windows下则对应xxx.dll或libxxx.lib
- 静态库:
- 这个规则的设计目的就是让开发者不用每次输入完整的库文件名,只需要指定核心名称即可,简化编译命令。
回到你的场景:
你用了 -lopencm3_stm32f0,链接器就会在 -L./libopencm3/lib 设定的路径里自动查找 libopencm3_stm32f0.a(你的静态库文件),所以能正常匹配完成链接。
如果想跳过这个规则直接指定库文件,也可以把完整的库文件路径写在编译命令里,比如:
gcc -L./libopencm3/lib main.o ./libopencm3/lib/libopencm3_stm32f0.a
不过显然用 -l 参数的写法更简洁。
内容的提问来源于stack exchange,提问作者EmTor
相关产品推荐
相关产品推荐

