我正在尝试开发一个使用外部.a静态库的应用程序。
由于这个外部库文件中已经定义了符号,有没有办法跳过使用它的.cpp源文件中头文件的include语句?
换句话说,如果我已经有.a文件,为什么我需要.h文件?
提前感谢
是的,你必须。
编译器需要知道库所使用的数据类型,并且需要知道函数所采用的参数以及返回值的类型。它还需要知道库使用的全局对象。
换句话说,如果我已经有.a文件,为什么我需要.h文件
编译器不使用对象文件来检索有关函数、数据或类型的信息。您需要在源代码中指定它。对象文件不是C语言的一部分。
您不需要.h
文件。您还可以在源代码中键入声明、函数原型。.h
文件可以包含在源代码中,也可以在其他源代码文件中重复使用。
您可以这样做:
#a.cpp
#include <iostream>
void who_are_you()
{
std::cout << "I am An";
}
#b.cpp
#include <iostream>
void who_are_you()
{
std::cout << "I am Bn";
}
#main.cpp
#include <iostream>
void who_are_you();
int main()
{
std::cout << "who_are_you()n";
who_are_you();
return 0;
}
然后
g++ -c a.cpp
g++ -c b.cpp
ar -r libA.a a.o
ar -r libB.a b.o
g++ main.cpp libA.a -o withA
g++ main.cpp libB.a -o withB
的输出/其中A将是
who_are_you()
I am A
的输出/其中B将是
who_are_you()
I am B
但一般情况下,@0 ___________的答案是正确的,你必须这样做。如果您注意到,我们在主文件中定义了whoare_you的签名。
使用外部库时是否必须包含头文件?
从技术上讲,你不必这么做。但是头文件会让使用库变得更容易。
为什么我需要.h文件?
头文件声明并在某些情况下定义类型、函数和变量。
如果可以导入模块,则不一定需要包含标头。
编译器需要知道您从库中使用的资源的签名。这可以通过包含适当的头文件或自己提供签名来完成。
您不需要包含头文件,只要您为库中使用的资源提供签名/原型即可。
始终是。您也可以使用#include
添加您现有的函数。编译器将为您包含特定的文件。