近来在写Makefile时候遇到如下问题。有库liba.so  libb.so  libc.so  都在我的工程目录下,比如  /home/wb/code/project/libliba.so依赖于libb.so 和 libc.so个人的代码中只用到了liba.so中的代码,我的Makefile就强行指定了
-Wl,-rpath= /home/wb/code/project/lib -la这样编译是没有问题的,但是运行起来的时候会提示找不到 libb.so.....用ldd 去看可执行文件,也能看到 执行文件 的lib列表中确实需要libb.so 和 libc.so, 但是后面的说明找不到库文件我也使用了-Wl,-rpath= /home/wb/code/project/lib -lb  -lc  去尝试过
同时用 -L 指定了库文件位置 ,但还是上述的错误有大神能解决一下吗。
现在我只好把libb.so libc.so 拷贝到了 系统的目录下进行后续开发。

解决方案 »

  1.   


    还是要用动态链接,但是希望运行程序找库时优先找我指定的文件目录,而不是系统目录,同时,也不希望更改LD_LIBRARY_PATH的值,因为想把这个项目做成一个可移动的,即使拷贝到了其他电脑上,直接编译,运行就可以,不想再进行多余的配置。
      

  2.   

    动态库的机制问题,在编译时需要你指定动态库的位置完成编译,在程序执行时,要在系统库目录下查找动态库,比如ubuntu下动态库编译后的路径要加到/etc/ld.so.conf 文件中,再用ldconfig命令(或重启)使路径生效
      

  3.   

    链接时指定rpath是不错的方法,没遇到过问题,楼主能不能确认一下是不是拼写错误
    -Wl,-rpath= /home/wb/code/project/lib
                      ^ 检查一下这里是不是有个空格?
      

  4.   


    -Wl,-rpath= /home/wb/code/project/lib
                      ^ 检查一下这里是不是有个空格?