gcc中-L选项问题什么原理

gcc编译链接动态库的时候使用-L选项指定动态库路径,生成可执行文件以后点击运行提示找不见动态库,但是使用LD_LIBRARY_PATH添加上该动态库路径以后运行没问题,这个是什么原因
gcc main.o -L . -ladd
ldd a.out
libadd.so=>not found

ls
add.h add.c main.o main.c libadd.so

因为是动态链接库呀,所以链接的时候只会记录入口地址,不会跟静态库一样把代码复制自己的程序来
所以需要指定库文件

执行的时候也需要指定库的路径呀,不然程序找不到库不是白搭么

参考: https://www.cnblogs.com/wanhuan/p/5723533.html

你知道为什么要加-L 参数吗? 就是因为编译器在默认的库路径下找不到这个library, 加-L 让编译器找到。

为什么加LD_LIBRARY_PATH 后才能执行?
首先你编译时用的是动态编译。(请自行百度动态编译,如果不知道的话) 生成的可执行文件在执行时,需要在系统默认库路径下(/lib, /usr/lib, ...)去找这个library,
如果不存在,同时LD_LIBRARY_PATH指定的 路径中也不存在, 程序会报错,或者出现“no such file ”的描述。

-l 是直接加上某库的名称,如-lc是libc库
-L 是库的路径,搜索的时候优先在-L目录下搜索
你使用gcc --help就可以看到所有的选项以及用法