xirurensheng_123
xirurensheng_123
采纳率56.3%
2018-03-06 09:15

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

5
已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • beblong 焙焙龙 3年前

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

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

    点赞 1 评论 复制链接分享
  • changqing1990 CH_Qing 3年前

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

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

    点赞 2 评论 复制链接分享
  • baihetianyin baihetianyin 3年前

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

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 3年前
    点赞 评论 复制链接分享

相关推荐