由于之前增加了解析postgresQL消息的功能,为打印每个消息的内容,在另外一个protooutput.h的文件中增加了每种消息格式的inline打印函数。为了知道代码中每次采用log_debug宏打印出来的信息的location。于是修改了log_debug宏,增加打印__FILE__,__LINE__,__func__的功能。增加完成后代码的大致情况如下:
打印消息内容的protooutput.h文件中有下面的函数:
log_debug修改后的代码如下:
其中LOG_TRACE_RUN宏就是新增加的打印location的宏。定义如下:
结果直接编译,却显示链接时提示没有定义_print_functionCallPK函数,但是把log_debug宏中新增加的LOG_TRACE_RUN宏去掉后,却能够顺利的链接完成。但是从上面的代码看完全没有错误哈,为什么链接不上呢?
后面想了想链接不上_print_functionCallPK函数,肯定是编译protooutput.h文件的时候出现了问题,多半是inline导致的。于是就把print_functionCallPK函数从inline修改成普通函数,再次编译却成功链接了。
这是为啥呢?有没有大神知道原因,请赐教?
时间: 2024-11-06 18:14:17