C 共享对象的实际用途
共享对象(.so)文件的实际用例是什么 据我所知,它用于与其他高级语言(如JAVA(JNI)等)链接。它还用于为各种操作系统风格/处理器体系结构创建库文件 如何使用此功能C 共享对象的实际用途,c,linux,shared,C,Linux,Shared,共享对象(.so)文件的实际用例是什么 据我所知,它用于与其他高级语言(如JAVA(JNI)等)链接。它还用于为各种操作系统风格/处理器体系结构创建库文件 如何使用此功能 例如,如果我想创建一个通用的可执行文件,并且需要在所有版本的Linux操作系统中工作,那么可以使用共享对象文件吗?如何实现?要使用共享对象,首先需要创建一个共享库。它也称为动态库 共享库用于动态运行时链接。这意味着在程序运行时,这些共享库被加载到RAM中 用于创建动态库或共享库的命令- cc -shared -o libany
例如,如果我想创建一个通用的可执行文件,并且需要在所有版本的Linux操作系统中工作,那么可以使用共享对象文件吗?如何实现?要使用共享对象,首先需要创建一个共享库。它也称为动态库 共享库用于动态运行时链接。这意味着在程序运行时,这些共享库被加载到RAM中 用于创建动态库或共享库的命令-
cc -shared -o libany_name.so file1.o file2.o file3.o
其中any_name
name表示您可以为库指定任何名称。对于libadd.so
您可以通过以下方式使用共享库执行程序:-
cc filename.c libany_name.so
创建可执行文件时-
cc filename.c
cc -static filename.c
或
它将创建一个动态可执行文件。这些动态可执行文件在运行时需要一些依赖文件。这些依赖项文件由编译器自动加载到
要避免这种情况,请使用静态库或静态可执行文件。静态可执行文件包含所有函数本身。可执行文件的大小将更大
创建静态库的命令-
ar rcs libany_name.a file1.o file2.o file3.o
用于创建静态可执行文件的命令-
cc filename.c
cc -static filename.c
作为补充,共享对象通常有一些共享文本段(除了一些私有的、非共享的文本段),这些文本段在使用MAP\u shared
时被定义。一个典型的Linux系统有数百个文件(例如/usr/lib/lib*.so
文件),因此它们可能共享一些公共RAM(使用同一个库的两个不同进程通常会共享其文本段的RAM),并且更新它们很容易(如果您更新了一些lib*.so
链接到它的程序的未来运行将使用更新的版本)
还可以在运行时使用动态加载共享对象(然后使用dlsym
在其中获取一些符号)。这就是加载方式。加载应用程序必须定义并记录一些约定,例如插件中要找到的符号的要求以及如何使用这些符号
一个很好的参考是;另请参见和
您的一般可执行目标可能是一种幻觉。首先,不同的Linux系统运行在不同的处理器或(x86 32位、x86-64、ARM)上。然后,即使仅限于x86-64 Linux,不同的发行版也有您的可执行文件所需的和的其他库的不同版本
最简单的方法是制作您的程序(因此发布其源代码);然后由发行商进行打包。此外,如果您将软件打包为通用发行版,也会有所帮助。在这里,您可以阅读有关此主题的许多有用信息。。