【问题标题】:Issue including library C++包括库 C++ 的问题
【发布时间】:2012-07-03 11:07:51
【问题描述】:

我有一个非常简单的 C++ 文件 Multiplier.cpp 和相应的头文件,我使用以下命令从中创建了一个库

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

在一个新目录中,我创建了一个使用Multiplier 类的Calculator.cpp(带有相应的头文件)。头文件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。

【问题讨论】:

    标签: c++ g++ static-libraries unix-ar


    【解决方案1】:

    您的包含文件Multiplier.h 在另一个文件夹中。您希望编译器如何找到它?您需要告诉编译器文件在哪里,要么使用-I 命令行标志并提供包含文件的路径,要么使用#include 指令中的路径。

    【讨论】:

    • 库中没有Multiplier.h文件吗?
    • @luketorjussen 不,图书馆不是这样工作的。编译器甚至看不到库——这是链接器的工作(它们是两个从根本上独立的组件,即使你在这里通过同一个可执行文件调用它们)。
    • 那么当你创建一个库的时候,你还需要把所有的头文件都复制进去吗?
    • 头文件被编译器用来定义,库被链接器用来获取实现?
    • @luketorjussen 头文件被编译器用于声明,库被链接器用于定义(=实现) .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多