假设我有一个C++静态库,我想以编译的形式分发,即。我船头和一个*.a文件。我需要向对方提供哪些信息才能成功使用我的图书馆,即能够用它编译代码(即,将其编译为可执行文件)。我现在脑子里想的事情是:
*.a
glibc
还有别的事吗PS.目标操作系统是Ubuntu 18.04>=和CentOS 7。
mi7gmzs61#
我不确定这是你想要的答案,但它可能会有帮助。文件*.a只是存档与*.o加上一些有关这些对象的信息。因此,一般来说,最好使用精确版本的编译器和操作系统,即。您的客户端将有所有的限制,就像他试图手动添加您的目标文件一样。如果你提供一个*.so文件,那么它将取决于它的接口。如果*.so抛出异常,或者它的接口包含非简单的类C对象(如std::vector或std::string等),那么只有同一运行时的程序才能使用这个库,即你有类似的限制。但是如果你能保证你的库不会抛出异常,并且没有非Ansi C接口,那么只需要提供操作系统信息。符合这些限制(接口只包含函数和POD数据,并且不抛出异常)允许一起使用不同的编译器。我希望这些信息对你的决定有用。
*.o
*.so
std::vector
std::string
1条答案
按热度按时间mi7gmzs61#
我不确定这是你想要的答案,但它可能会有帮助。
文件
*.a
只是存档与*.o
加上一些有关这些对象的信息。因此,一般来说,最好使用精确版本的编译器和操作系统,即。您的客户端将有所有的限制,就像他试图手动添加您的目标文件一样。如果你提供一个
*.so
文件,那么它将取决于它的接口。如果
*.so
抛出异常,或者它的接口包含非简单的类C对象(如std::vector
或std::string
等),那么只有同一运行时的程序才能使用这个库,即你有类似的限制。但是如果你能保证你的库不会抛出异常,并且没有非Ansi C接口,那么只需要提供操作系统信息。
符合这些限制(接口只包含函数和POD数据,并且不抛出异常)允许一起使用不同的编译器。
我希望这些信息对你的决定有用。