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常用集合总结
    java集合类——Stack栈类与Queue队列
    Snmp的学习总结(一)
    Java中StringBuilder的清空方法比较
    String,StringBuffer与StringBuilder
    浅谈Oracle数据库分区表
    关于java读取文件IO流学习总结(一)
    关于java读取文件IO流学习总结(二)
    CSS
    Datatables 配置
  • 原文地址:https://www.cnblogs.com/jhj117/p/7845215.html
Copyright © 2011-2022 走看看