在eclipse中,我在使用MinGW编译器的Windows平台中完成了以下操作 - C_proj.exe --->链接----> libB_proj.a ----->链接----> libA_proj.a
将A与B链接时,我只指定了libA_proj.a的路径(不是lib名称,因为这似乎不可能!)
在C中使用B时,我必须同时指定libA_proj.a和libB_proj.a。
代码 -
//a.h
class a
{
public:
void printA();
};
//a.cpp
void a::printA()
{
std::cout<<"This is 'a'"<<std::endl;
}
//b.h
class b
{
public:
void printB();
void printA();
};
//b.cpp
void b::printB()
{
std::cout<<"This is 'B'"<<std::endl;
}
void b::printA()
{
std::cout<<"This is 'B'....calling A"<<std::endl;
a objA;
objA.printA();
}
//c.cpp
int main()
{
b objB;
objB.printB();
objB.printA();
return 0;
}
现在我的要求是 - 我不想用C语言将B和A链接起来。有没有办法只将B与C链接并完成工作,以便我只能向第三方提供B和C exe?
答案 0 :(得分:2)
lib文件(或.a文件)是目标文件的集合 - 有点像zip文件,但没有压缩。所以你不能真正将lib文件与另一个lib文件链接。
你可以做的是从两个较小的库中形成一个大型库 - 基本上是拆包然后重新打包为一个。使用ar -x libfile.a
提取模块,然后可以使用ar -a libfile2.a name1.o name2.o
将目标文件添加到新库中。
但是,我只是告诉两个组件的用户链接两个库。更简单的解决方案。