gcc 动态库的静态链接

一个库 A 要编译成动态的*.so,但这个库 A 又依赖另一个库 B,而这个库 B 是被编译成静态的*.a,那么现在就需要在编译*.so的时候静态链接这个*.a

我百度到的,是在编译*.a的时候,CFLAGS-shared -fPIC,最后我试了下,失败了。下面是相关链接:

  1. https://blog.csdn.net/sdghchj...
  2. https://www.cnblogs.com/nobug...

随后我谷歌了下,找到这个贴,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

回到顶部