You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Automake生成Makefile引发构建警告,如何解决?

解决g++编译警告:linker input file unused because linking not done

问题背景

子项目的Makefile.am内容如下:

## Process this file with automake to produce Makefile.in

lib_LTLIBRARIES =  \
        libodbc_lib.la

libodbc_lib_la_SOURCES =  \
        database_odbc.cpp \
        database_odbc.h

libodbc_lib_la_CXXFLAGS = -I../../dbinterface \
        -DUNICODE \
        -DUNIXODBC \
        `odbc_config \
        --include-prefix` 

libodbc_lib_la_LDFLAGS = -L../dbinterface \
        -ldbinterface \
        `odbc_config \
        --libs` 

生成的编译命令中出现如下警告:

libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I/home/igor/dbhandler/libodbc -I.. -I../../dbinterface -DUNICODE -DUNIXODBC /usr/include -g -O0 -MT libodbc_lib_la-database_odbc.lo -MD -MP -MF .deps/libodbc_lib_la-database_odbc.Tpo -c /home/igor/dbhandler/libodbc/database_odbc.cpp  -fPIC -DPIC -o .libs/libodbc_lib_la-database_odbc.o
g++: warning: /usr/include: linker input file unused because linking not done

警告原因

你误解了警告的根源:-c选项是编译阶段的必需参数,它告诉g++只编译源文件,不执行链接操作,本身没有问题。

真正的问题是odbc_config --include-prefix的输出是/usr/include这个路径本身,而不是编译选项需要的-I/usr/include。在编译阶段(带-c),g++会把裸路径当成链接输入文件,但此时不做链接,所以抛出这个警告。

解决方法

修改Makefile.am中libodbc_lib_la_CXXFLAGS的配置,给odbc_config --include-prefix的输出加上-I前缀,让它成为合法的编译包含路径选项:

libodbc_lib_la_CXXFLAGS = -I../../dbinterface \
        -DUNICODE \
        -DUNIXODBC \
        -I`odbc_config --include-prefix` 

或者使用Automake支持的Make函数语法(更规范):

libodbc_lib_la_CXXFLAGS = -I../../dbinterface \
        -DUNICODE \
        -DUNIXODBC \
        -I$(shell odbc_config --include-prefix)

修改后重新执行autoreconf -i、./configure和make,警告就会消失。

额外建议

  1. 可以检查odbc_config的输出是否符合预期,执行odbc_config --include-prefix确认返回的是正确的头文件路径。
  2. 如果系统支持pkg-config,可以考虑用pkg-config unixodbc --cflags替代odbc_config --include-prefix,这是更通用的编译选项获取方式:
    libodbc_lib_la_CXXFLAGS = -I../../dbinterface \
            -DUNICODE \
            -DUNIXODBC \
            $(shell pkg-config unixodbc --cflags)
    
    对应的链接选项也可以换成$(shell pkg-config unixodbc --libs)。

内容的提问来源于stack exchange,提问作者Igor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:48:17