2012-07-03 49 views
1

我有一个很简单的C++文件Multiplier.cpp与相应的头文件,从我所使用下列命令文档版本包括库C++

$ g++ -o Multiplier.o -c Multiplier.cpp 
$ ar cr libMultiplier.a Multiplier.o 

在一个新的目录创建的库,我已经创建了一个Calculator.cpp(与相应的头文件),它使用Multiplier类。头文件Calculator.h具有对应的`的#include“Multiplier.h”

头文件Calculator.h具有对应#include "Multiplier.h"

我复制创建的库到该目录我尝试使用以下命令以编译Calculator.cpp

$ g++ -o Calculator Calculator.cpp -L. -lMultiplier 

这给了我这些错误:

In file included from Calculator.cpp:1: 
Calculator.h:1:24: error: Multiplier.h: No such file or directory 
In file included from Calculator.cpp:1: 
Calculator.h:6: error: ISO C++ forbids declaration of ‘Multiplier’ with no type 
Calculator.h:6: error: expected ‘;’ before ‘&’ token 
Calculator.h:8: error: expected `)' before ‘&’ token 
Calculator.cpp:5: error: redefinition of ‘class something::Calculator’ 
Calculator.h:5: error: previous definition of ‘class something::Calculator’` 

我已经搜索了很长时间,但无法弄清楚发生了什么。 我正在使用GCC 4.2.1。

回答

2

包含文件Multiplier.h位于另一个文件夹中。你如何期待编译器找到它?您需要使用-I命令行标志并提供包含文件的路径或使用#include指令中的路径来告诉编译器文件所在的位置。

+0

库中没有'Multiplier.h'文件吗? – luketorjussen

+2

@luketorjussen不,这不是图书馆的工作方式。编译器甚至没有看到这个库 - 这是链接器的工作(即使你通过相同的可执行文件在这里调用它们,它们也是两个基本上独立的组件)。 –

+0

所以当你创建一个库时,你仍然需要复制所有的头文件呢? – luketorjussen