c - 共享对象的实际用途

标签 c linux shared

<分区>

共享对象 (.so) 文件的实际用例是什么?

据我了解,它用于链接其他高级语言,如 JAVA (JNI) 等。它还用于为各种操作系统风格/处理器架构创建库文件。

如何使用这个功能?

例如,如果我想创建一个通用的可执行文件并且需要在所有版本的 Linux 操作系统中工作,是否可以使用共享对象文件?它是如何完成的?

最佳答案

要使用共享对象,首先您需要创建一个共享库。也称为动态库。

共享库用于动态运行时链接。这意味着在程序运行时,这些共享库被加载到 RAM 中。

创建动态库或共享库的命令-

cc -shared -o libany_name.so file1.o file2.o file3.o

其中 any_name name 表示您可以为库指定任何名称。对于ex-libadd.so

您可以通过以下方式使用共享库执行您的程序-

cc filename.c libany_name.so

当你创建一个可执行文件时-

cc filename.c 

cc filename.c libany_name.so

它将创建一个动态可执行文件。这些动态可执行文件在运行时需要一些依赖文件。这些依赖文件由编译器自动加载。

要避免这种情况,请使用静态库或静态可执行文件。静态可执行文件本身包含所有功能。可执行文件的大小会更大。

创建静态库的命令-

ar rcs libany_name.a file1.o file2.o file3.o

创建静态可执行文件的命令-

cc -static filename.c

关于c - 共享对象的实际用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25236964/

相关文章:

C 中的逗号和赋值运算符

linux - assembly - 指定节的方法

linux - 如何在unix中搜索文件最后一行的第一个单词,然后在另一个文件中找到它以删除具有该模式的下一行?

c - 了解多线程共享资源 : shmid, shmat、shmdt

c - 寻求有关安装和使用mips-gcc交叉编译器以生成自定义ASM的帮助

c - lex 解析器解析用 pascal 编写的程序

python - ModuleNotFoundError:没有名为 'schedule' 的模块

flutter - 再次启动应用程序时如何使用共享首选项打开特定屏幕

c - 深度复制结构到 POSIX 共享内存

c - 如何阅读类函数宏?