【问题标题】:g++ errors while compiling object files编译目标文件时出现 g++ 错误
【发布时间】:2012-03-16 06:47:13
【问题描述】:

我编写了一个遵循一般结构的小型 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 没有太多经验。

【问题讨论】:

    标签: c++ c linker makefile


    【解决方案1】:

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

    而你修复它的方法是修复你的代码。这与makefile无关。从 ./include/algparam.h 中的第 322 行删除变量“p”。 (编译器的警告信息中有一点提示。)

    【讨论】:

    • 我更新了它(将错误更改为警告)。但是这些头文件是由cryptopp提供的……改变它们不是一个坏主意吗?
    • 如果它是开源的,请进行更改并将其提交回存储库。如果您不想这样做,请向开发人员提交功能请求以编写更清晰的代码。 (不过说实话,如果这种情况发生,你会很幸运——开源代码的质量从来没有这么好。)作为最后的手段,你可以在包含那个特定的头文件时禁用这些警告。大多数编译器都有在源文件中启用和禁用警告的方法。
    【解决方案2】:

    对于这个警告,你可以在 test.cpp 或 .h 文件中注释变量 p,因为你不使用它,或者像这样

    在您的代码中

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-21
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      相关资源
      最近更新 更多