Makefile 链接到已安装的库,而不是开发库

Makefile 链接到已安装的库,而不是开发库,makefile,Makefile,我遇到了一个奇怪的问题,我相信这与我正在试验的一个公共开源项目的Makefile有关。我不是Makefile专家,我只做了通常的./configure和makeinstall 基本上,我将一些简单的打印语句添加到一些编译到库中的源代码中。打印语句不会出现。然后我尝试使用调试器进入库,它只是“跳过”整个部分(它是用-g-O0编译的)。这让我相信,当我运行make时,它链接到系统上已安装的库,而不是dev src文件夹中最近编译的库 makefile中有一行看起来相关: 前缀=/usr/local

我遇到了一个奇怪的问题,我相信这与我正在试验的一个公共开源项目的Makefile有关。我不是Makefile专家,我只做了通常的./configure和makeinstall

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

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


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

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

您不需要说明什么操作系统,但在linux上,您应该能够通过检查/proc//maps来确定为给定库加载了什么文件。例如,如果我想知道用于提供libncurses.so的文件是什么,那么对于我的shell,我可以:

$ 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输出等效的输出,但对于任何正在运行的进程来说都是如此。

Update:running Linux。ldd返回“不是动态可执行文件”,因此它看起来像是静态编译的。ubuntu上安装了一个libpoppler包,但我相信这些都是动态库。更新2:我放弃了提供的makefile,取而代之的是cmake生成的。现在一切似乎都好了。我认为这只是一个过于复杂的makefile的例子。