威's profile我只是风的影子,根本不存在的东西PhotosBlogLists Tools Help

Blog


    27 April

    把库的搜索路径编译到程序中

        通常在linux下的程序都会依赖一堆的so,系统会在/etc/ld.so.conf中定义的路径中寻找这些
    动态库。比如装了一个软件,它有一些自己的so,在/opt/myproduct/lib下,很可能它会修改
    /etc/ld.so.conf,把/opt/myproduct/lib添加进去,以便自己的程序使用的时候能找到。但这样
    引入了一些潜在的问题,容易出来版本混乱,就象我前面遇到的问题,下面两个地方都有同一个库:
    libfreetype.so.6 => /usr/lib/libfreetype.so.6
    libfreetype.so.6 => /opt/gd/lib/libfreetype.so.6
        其中第一个是系统的,第二个是由于安装其他软件给附带安装上的,这两个libfreetype.so.6都是
    符号连接,系统的是连到libfreetype.so.6.3.8,第二个是libfreetype.so.6.3.7,就这一点小小
    的差别就让我的一些程序不能运行,虽然说这也和这个库的设计有关,但这种情况是可以避免的。
    就是在gcc编译的参数里带上库的搜索路径,很简单,比如
     
    gcc -Wl,-R/opt/myproduct/lib  ...
     
        就把/opt/myproduct/lib带到了编译好的程序中,改程序运行的时候会先到这个路径中搜索库。
    这样就不需要通过把/opt/myproduct/lib添加到/etc/ld.so.conf中这种修改系统的办法来达到目的。