我想知道使用命令“ g ++ -o main main.o -L <目录> -l <​​lib_name>”时发生的情况

时间:2019-04-26 10:49:10

标签: linker g++ linker-flags

假设我在当前目录中有 main.c main.o libheymath.so 。我想将它们链接在一起以生成可执行文件。我使用命令“ g ++ -o main main.o -L./ -lheymath” 来实现这一点。但是我不知道为什么要指出库目录和名称。据我所知,当我运行“ ./ main” 时,系统会将共享库加载到特定目录(例如 / lib / use)中的内存中/ lib 和LD_LIBRARY_PATH等中指定的目录,但不是我所指出的。那么“-L. / -lheymath” 的目的是什么?

  

工作目录文件:

     
    

main.c,main.o,libheymath.so

  
     

命令:

     
    

g ++ -o main main.o -L./ -lheymath

         

./ main

  

1 个答案:

答案 0 :(得分:0)

-L允许指示在链接时查找lib的路径(在生成的可执行文件中未“保存”该lib,而是在启动该可执行文件时将其重用)

-l表示要链接的库,它可以检查是否缺少某些符号,并在启动可执行文件时知道要加载的库列表。

链接时,这些库的路径未保存到可执行文件中,因为可执行文件和库都可以在链接后移动(并且可以安装在其他主机上)

注意LD_LIBRARY_PATH在启动可执行文件以查找动态库时使用,而在链接对象/库以创建可执行文件时不使用