gcc 要成功地将预编译的静态库集成到可执行文件中,需要哪些信息?

d8tt03nd  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(107)

假设我有一个C++静态库,我想以编译的形式分发,即。我船头和一个*.a文件。
我需要向对方提供哪些信息才能成功使用我的图书馆,即能够用它编译代码(即,将其编译为可执行文件)。我现在脑子里想的事情是:

  • 头文件
  • 编译器,包括版本,标志(在我的例子中是gcc)
  • glibc版本
  • C++标准

还有别的事吗
PS.目标操作系统是Ubuntu 18.04>=和CentOS 7。

mi7gmzs6

mi7gmzs61#

我不确定这是你想要的答案,但它可能会有帮助。
文件*.a只是存档与*.o加上一些有关这些对象的信息。因此,一般来说,最好使用精确版本的编译器和操作系统,即。您的客户端将有所有的限制,就像他试图手动添加您的目标文件一样。
如果你提供一个*.so文件,那么它将取决于它的接口。
如果*.so抛出异常,或者它的接口包含非简单的类C对象(如std::vectorstd::string等),那么只有同一运行时的程序才能使用这个库,即你有类似的限制。
但是如果你能保证你的库不会抛出异常,并且没有非Ansi C接口,那么只需要提供操作系统信息。
符合这些限制(接口只包含函数和POD数据,并且不抛出异常)允许一起使用不同的编译器。
我希望这些信息对你的决定有用。

相关问题