链接到已安装的库,而不是dev库

时间:2011-06-17 19:12:07

标签: makefile

我遇到一个奇怪的问题,我认为这与我正在尝试的常见开源项目的Makefile有关。我不是Makefile专家,我只做了通常的./configure和make install。

基本上,我在一些编译成库的源代码中添加了一些简单的print语句。打印语句不会出现。然后我尝试使用调试器进入库,它只是“跳过”整个部分(它是用-g -O0编译的)。这让我相信,当我运行make时,它链接到我系统上已安装的库,而不是我的dev src文件夹中最近编译的库。

makefile中有一行看起来相关: prefix = / usr / local

我可以做出任何简单的改变,或者无论如何确认我的怀疑?

2 个答案:

答案 0 :(得分:0)

如果库是动态链接的,则可以对正在运行的任何可执行文件运行ldd以确定正在选择哪个库。如果它不是您所期望的,则可以设置LD_LIBRARY_PATH以覆盖共享对象的搜索路径。如果它是静态链接的,则路径必须位于makefile中的某个位置。使用grep找到它。

答案 1 :(得分:0)

你没有说什么操作系统,但在Linux上你应该能够通过检查/ proc // maps来找出为给定库加载的确切文件。例如,如果我想知道用于为我的shell提供libncurses.so的文件,我可以这样做:

$ cat /proc/$$/maps | grep ncurses

让我输出如下:

    7f25ab1e4000-7f25ab224000 r-xp 00000000 08:01 6029412                    /lib/libncurses.so.5.7
    7f25ab224000-7f25ab423000 ---p 00040000 08:01 6029412                    /lib/libncurses.so.5.7
    7f25ab423000-7f25ab427000 r--p 0003f000 08:01 6029412                    /lib/libncurses.so.5.7
    7f25ab427000-7f25ab428000 rw-p 00043000 08:01 6029412                    /lib/libncurses.so.5.7

所以现在我知道ncurses.so对/lib/libncurses.so.5.7感到满意

对于您的流程,只需将'$$'替换为正在运行的流程的PID。其他类UNIX操作系统通常会有一个类似/ proc的接口或一个系统工具,它可以为您提供有关正在运行的进程的信息。例如,在Solaris上,'pldd'命令可以显示ldd输出的等效值,但适用于任何正在运行的进程。