编译对象文件时出现g++错误

g++ errors while compiling object files

本文关键字:g++ 错误 对象 文件 编译      更新时间:2023-10-16

我写了一个小的makefile,它遵循通用结构,创建对象文件,然后链接以创建可执行文件。这是它的样子。。

CXX=g++
CXXFLAGS=-Wall -g
INCLUDES= -I ./
LDFLAGS= -L ./
LIBS= -lcryptopp
SRCS= test.cpp
OBJS= $(SRCS:.cpp=.o)
EXEC=test
all: $(EXEC) 
$(EXEC): $(OBJS)
    $(CXX) $(CXXFLAGS) $(INCLUDES) -o $(EXEC) $(OBJS) $(LDFLAGS) $(LIBS)
.cpp.o: 
    $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@

Cryptopp库(Cryptopp)是静态的。现在,当我尝试运行这个makefile时,当第一个尝试创建对象文件的命令运行时。。它给了我很多这样的错误。。

test.cpp:289:   instantiated from here
./include/algparam.h:322: warning: unused variable 'p'
./include/algparam.h: In member function 'void CryptoPP::AlgorithmParametersTemplate<T>::MoveInto(void*) const [with T = unsigned char]':

最后,它链接得很好,可执行文件也能正常工作,但我如何在不删除-wall的情况下消除这些警告?我对make和makefile没有太多经验。

这不是错误,而是警告。(从技术上讲,您可以将警告视为不会阻止编译器完成其工作的错误。)

修复它的方法就是修复代码。这与生成文件无关。从中的第322行删除变量"p"/include/algparam.h。(编译器发出的警告消息中有一点提示。)

对于此警告,您可以在test.cpp或.h文件中注释变量p,因为您没有使用它,或者喜欢此

在您的代码中

{
...
#ifdef _DEBUG_
xxx p;
#endif
...
}

在您的makefile中,如果您想使用p,只需在CXXFLAGS 中添加-D_DEBUG_即可