zoukankan      html  css  js  c++  java
  • 转: gcc 指定运行时动态库路径

    gcc 指定运行时动态库路径

    由于种种原因,Linux 下写 c 代码时要用到一些外部库(不属于标准C的库),可是由于没有权限,无法将这写库安装到系统目录,只好安装用户目录下如 /home/youname/lib,可是怎么编译才能让程序正常编译,并且正常运行呢。这样使用gcc:
    gcc -I/path/to/include/dir -L/path/to/lib/dir -llibname -Wl,-rpath,/path/to/lib/dir -o test test.c
    解释一下,-I ,-L ,-l 这三个经常用,分别表示编译时include目录,库目录和所用的库,而-Wl,-rpath,是什么呢,它就是指定编译好的程序在运行时动态库的目录(可以 man gcc 搜索 -Wl查看),当编译好程序后用 ldd 就可以看到你指定的路径了。
    当然也可以不用-Wl,-rpath,而用–static 采用静态编译,这样程序在哪都能正常运行,不过代价是程序要大很多。
    还有一种方法是用LD_LIBRARY_PATH,不过很多人不推荐用这个,所以最好的方法还是用 -Wl,-rpath,/path/to/lib/dir。

    gcc编译链接动态库时,很有可能编译通过,但是执行时,找不到动态链接库,那是

    因为-L选项指定的路径只在编译时有效,编译出来的可执行文件不知道-L选项后面的值,

    当然找不到。可以用ldd <your_execute>看看是不有 ‘not found’在你链接的库后面,

    解决方法是通过-Wl,rpath=<your_lib_dir>,使得execute记住链接库的位置

    参考链接

    http://gcc.gnu.org/ml/gcc-help/2005-12/msg00017.html

    转自: http://www.cnblogs.com/bourneli/archive/2012/04/27/2474103.html

  • 相关阅读:
    java 单链表 练习
    大问题-简明哲学导论
    git的常见错误
    python在Ubuntu添加模块搜索路径
    前端
    TCP/IP图解
    调试
    Design program
    算法
    面向对象-聚集,程序比较发现
  • 原文地址:https://www.cnblogs.com/jhj117/p/7845215.html
Copyright © 2011-2022 走看看