我想知道当我使用命令 "g++ -o main main.o -L<directory> -l<lib_name>" 时发生了什么
I want to know what happened when I use the command "g++ -o main main.o -L<directory> -l<lib_name>"
假设我在当前目录中有 main.c main.o libheymath.so。我想link把它们一起生成一个可执行文件。我使用命令 "g++ -o main main.o -L./ -lheymath" 来实现这一点。但是不知道为什么要注明库目录和名称。据我所知,当我 运行 "./main" 时,系统会将共享库加载到特定目录中的内存中,例如 /lib 和 /use/lib 以及在 LD_LIBRARY_PATH 等中指定的目录,但不是我所指出的。那么 "-L./ -lheymath" 的目的是什么?
working directory files:
main.c, main.o, libheymath.so
命令:
g++ -o main main.o -L./ -lheymath
./main
-L 允许指示在 link 时间寻找 lib(s) 的路径(它不是 'saved' 在生成的可执行文件中,当您启动可执行文件时要重用)
-l 表示您想要 link 的库,这允许检查是否缺少某些符号,并知道在启动可执行文件时要加载的库列表。
当你 link 这些库的路径不会保存到可执行文件中,因为可执行文件和库都可以在 link 之后移动(并且可能安装在其他主机上)
注意 LD_LIBRARY_PATH
在启动可执行文件以查找动态库时使用,在 link objects/libs 生成可执行文件时不使用
假设我在当前目录中有 main.c main.o libheymath.so。我想link把它们一起生成一个可执行文件。我使用命令 "g++ -o main main.o -L./ -lheymath" 来实现这一点。但是不知道为什么要注明库目录和名称。据我所知,当我 运行 "./main" 时,系统会将共享库加载到特定目录中的内存中,例如 /lib 和 /use/lib 以及在 LD_LIBRARY_PATH 等中指定的目录,但不是我所指出的。那么 "-L./ -lheymath" 的目的是什么?
working directory files:
main.c, main.o, libheymath.so
命令:
g++ -o main main.o -L./ -lheymath
./main
-L 允许指示在 link 时间寻找 lib(s) 的路径(它不是 'saved' 在生成的可执行文件中,当您启动可执行文件时要重用)
-l 表示您想要 link 的库,这允许检查是否缺少某些符号,并知道在启动可执行文件时要加载的库列表。
当你 link 这些库的路径不会保存到可执行文件中,因为可执行文件和库都可以在 link 之后移动(并且可能安装在其他主机上)
注意 LD_LIBRARY_PATH
在启动可执行文件以查找动态库时使用,在 link objects/libs 生成可执行文件时不使用