个人工具
登录
查看“Compiling C”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“Compiling C”的源代码
来自Ubuntu中文
←
Compiling C
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 创建共享库 == 共享库是编译器以一种特殊的方式生成的对象文件的集合。对象文件模块中所有地址(变量引用或函数调用)都是相对而不是绝对的,这使得共享模块可以在程序的运行过程中被动态地调用和执行。 要构建一个共享库,首先要编译出库中需要的对象模块。例如:下面是文件名为 shellofirst.c 和 shellosecond.c 的两个源码文件: <source lang="c"> /* shellofirst.c */ #include <stdio.h> void shellofirst() { printf(“The first hello from a shared library\n”); } /* shellosecond.c */ #include <stdio.h> void shellosecond() { printf(“The second hello from a shared library\n”); } </source> 要将以上两个源码文件编译成对象文件,可以用下面的命令: $ gcc -c -Wall -fpic shellofirst.c shellosecond.c 选项 -c 告诉编译器只生成 .o 的对象文件。选项 -fpic 使生成的对象模块采用浮动的(可重定位的)地址。缩微词 pic 代表“位置无关代码”(position independent code)。 下面的 gcc 命令将对象文件构建成一个名为 hello.so 的共享库: $ gcc -Wall -shared shellofirst.o shellosecond.o -o hello.so 选项 -o 用来为输出文件命名,而文件後缀名 .so 告诉编译器将对象文件链接成一个共享库。通常情况下,链接器定位并使用 main() 函数作为程序的入口,但是本例中输出模块中没有这种入口点,为抑制错误选项 -shared 是必须的。 编译器能将後缀为 .c 的文件识别为 C 语言源代码文件,并知道如何将其编译成为对象文件。基于这一点,先前的两条命令我们可以合并为一条;下面的命令直接将模块编译并存储为共享库: $ gcc -Wall -fpic -shared shellofirst.c shellosecond.c -o hello.so 下面的程序,存储在文件 stwohellos.c 内,是调用共享库中两个函数的主程序: <source lang="c"> /* stwohellos.c */ void shellofirst(void); void shellosecond(void); int main(int argc,char *argv[]) { shellofirst(); shellosecond(); return 0; } </source> 该程序可以用下面的命令编译并链接共享库: $ gcc -Wall stwohellos.c hello.so -o stwohellos 程序 stwohello 已经完成,但要运行它必须让其能定位到共享库 hello.so,因为库中的函数要在程序运行时被加载。 需要注意的是,当前工作目录可能不在共享库的查找路径中,因此需要使用如下的命令行设定环境变量LD_LIBRARY_PATH: $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
返回至
Compiling C
。