经过一番验证,对 libpq 的编译过程有了进一步的了解。

src/interfaces/libpq 目录下,有很多的 c 源文件。

如:fe-misc.c ,fe-print.c 等等。

那么这些文件和最终编译好的libpq.so 有何关系呢?

从源文件目录下的几个文件来看:

src/interfaces/libpq/Makefile中,有:

...    OBJS=....  fe-misc.o ...

src/interfaces/libpq/nls.mk中,有:

...    GETTEXT_FILES=.... fe-misc.c

因此,做了如下的实验:

把fe-misc.c 文件改名 fe-gao.c

上述 两个 fe-misc 的名字 分别变成: fe-gao.o  和  fe-gao.c

重新编译,运行。没有任何问题。

从 libpq-int.h 中可以看到,凡是涉及到 fe-misc.c 的函数调用,都是在此文件中

声明外部函数:

extern ...

可以这样认为:

编译链接 libpq.so文件的时候,是在当前目录下寻找 那些 Makefile中声明的.o文件,

来发现调用关系,链接成 libpq.so。