gcc 动态库的静态链接
一个库 A 要编译成动态的*.so
,但这个库 A 又依赖另一个库 B,而这个库 B 是被编译成静态的*.a
,那么现在就需要在编译*.so
的时候静态链接这个*.a
。
我百度到的,是在编译*.a
的时候,CFLAGS
加-shared -fPIC
,最后我试了下,失败了。下面是相关链接:
随后我谷歌了下,找到这个贴,https://stackoverflow.com/que...
其中的这句 You can't statically link shared library (or dynamically link static),是在说不能动态库静态链接。但国内博客(挺多人写的这方面,你要是百度的话就可以发现)写的又是可以这么做,有点晕,互相矛盾啊这个。
难道是我遗漏了某个概念,细节,求指点。
回答:
stackoverflow 说的是你不能动态链接静态库,并不是在生成动态库时不能使用静态库。这与你的问题应该是无关的。
另外,除了CFLAGS,还有一个CXXFLAGS,这俩一个用于C,一个用于C++,你得根据你的工程决定改哪一个,或者都改。
回答:
是可以的,关键静态库编译的时候加 -fPIC
show.cpp
void Show(const std::string& info){
printf("%s\n", info.c_str());
}
test.cpp
extern void Show(const std::string& info);void test()
{
Show("say haha");
}
main.cpp
extern void test();int main()
{
test();
return 0;
}
编译步骤及结果:
以上是 gcc 动态库的静态链接 的全部内容, 来源链接: utcz.com/p/192441.html