我正在linux上编译一个C ++程序,我可以运行make并将其全部编译,但是当我需要降级或更改其中一个程序对另一个程序的依赖关系时,它就会崩溃。我想知道是否有可能创建一个独立的可执行文件,并将其捆绑在内部?没有太多的依赖关系,因此大小不是问题。
所以,您要问的是,您可以链接到库的静态版本(直接包含在程序中),而不是链接到程序外部的动态版本的libraris(共享库)吗?
答案是“是”,但这并不总是那么简单。首先,您必须确保已在系统中实际安装了库的静态版本:静态库和动态库是不同的文件,通常“标准”安装仅提供动态库。
如果您已经针对那些库编译了代码,则可能已经安装了静态库,因为至少在GNU / Linux系统上,静态库通常与所需的头文件等一起包含在“ dev”包中。来编译代码。
要进行此工作,您需要修改链接器命令行。如果您具有binutils软件包的最新版本(提供了链接器),则可以更改链接行,以将<之类的参数替换为-l:libssl.a -l之类的参数: libcrypto.a(不要忘了-l后的冒号),应该这样做。