2011-05-16 63 views
1

gcc手册页说:“当您使用多个相同类型的选项时,顺序很重要;例如,如果多次指定-L,则会按指定的顺序搜索目录。链接 - 包含哪个库?

但是,这些-L目录是在系统目录之前搜索的(例如,那些ld通常使用的)?

我有这样的情况,我有两个同名的库,一个在系统位置,另一个在我的工作目录,我想用我的,但无法弄清楚如何验证我的版本正在使用。

回答

1

尝试“ldd/bin/your/application”。例如:

ldd `which bash` 
linux-vdso.so.1 => (0x00007fff46eda000) 
libncurses.so.5 => /lib/libncurses.so.5 (0x00007facdd618000) 
libdl.so.2 => /lib/libdl.so.2 (0x00007facdd414000) 
libc.so.6 => /lib/libc.so.6 (0x00007facdd090000) 
/lib64/ld-linux-x86-64.so.2 (0x00007facdd863000) 

一般有3只选择一个人如何可以指定为二进制文件使用的库:开始你的可执行

  • RPATH连接选项前

    1. 设置PATH环境变量(见其他我在SO上的问题/答案以了解更多关于此选项的信息)
    2. 将您的共享库添加到所有其他系统库。
  • +0

    非常有帮助的二进制!有没有办法在我的Makefile中确保这一点? – sholsapp 2011-05-16 16:42:23

    +0

    @gnucom:是的,您可以使用Makefile中的ldd。尽管如果这将是一个好主意取决于你的项目。 – 2011-05-16 16:48:07

    +0

    我的意思是有一种方法可以确保在系统之前搜索包含的目录,而不是检查之后包含哪些库? – sholsapp 2011-05-16 16:58:31