0

假设我在当前目录中有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

。/主要的

4

1 回答 1

0

-L 允许指示在链接时查找库的路径(它不会“保存”在生成的可执行文件中,以便在您启动可执行文件时重用)

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

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

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

于 2019-04-26T10:54:49.243 回答