例如,数学库是 -lm,openmotif 库是 -lXm
如何确定这些缩写(以避免冲突)以及这些缩写在 Makefile 中的何处标注?(如果必须将它们传递给编译器)
我正在对依赖关系进行一些研究(例如使用 ldd 和 nm),这就是我想知道的原因。
答案1
这些缩写只是链接器需要用来查找要绑定的库代码的库名称的缩写。例如,-lXm 告诉链接器查找 libXm.so 或 libXm.a,具体取决于它是进行动态绑定还是静态绑定。命名库时没有通用的机制来避免冲突。库的作者选择一个名称,并且通常会尽量避免选择与任何其他库(尤其是标准系统库)冲突的名称。
链接器确实需要知道哪些库要链接到可执行文件中。如果编译和链接步骤由“make”驱动,则 Makefile 将导致使用 -l 标志调用编译器,该标志指定要使用的库。