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

  • 相关阅读:
    tomcat与resin的比较
    Linux Resin 安装配置
    [BZOJ3456]城市规划
    ZJOI 2017 仙人掌
    「LibreOJ NOI Round #1」动态几何问题
    [SDOI2015]约数个数和
    codeforce 940F
    codeforce 940F
    codeforce 940E
    [NOI2009]植物大战僵尸
  • 原文地址:https://www.cnblogs.com/jhj117/p/7845215.html
Copyright © 2011-2022 走看看