fPIC的全称是 Position Independent Code, 用于生成位置无关代码。什么是位置无关代码,个人理解是代码无绝对跳转,跳转都为相对跳转。 1、不加fPIC选项 即使不加fPIC也可以生成.so文件,但是对于源文件有要求,例如 因为不加fPIC编译的so必须要在加载到用户程序的地址空间时重定向所有表目,所以在它里面不能引用其它地方...
-fPIC:表示编译为位置独立(地址无关)的代码,不用此选项的话,编译后的代码是位置相关的,所以动态载入时,是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。 -L:指定链接库的路径,-L.表示要连接的库在当前目录中 -ltest:指定链接库的名称为test,编译器查找动态连接库时有隐含的命名规...
fPIC:产生位置无关码(position independent code) 库名规则:libxxx.so 将相关文件打包为目标文件,这里和静态库略有不同: 链接目标文件,将其链接成共享库文件: 将生成的共享库文件安装到适当的位置,以供其他程序使用 如果您只想让某个程序使用该共享库,而不是所有程序,可以将共享库文件放在该程序...
3、这个fPIC是个什么选项(摘自网上): -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。 gcc -shared -...
-fPIC:表示编译为位置独立(地址无关)的代码,不用此选项的话,编译后的代码是位置相关的,所以动态载入时,是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。 -L:指定链接库的路径,-L. 表示要连接的库在当前目录中 -ltest:指定链接库的名称为test,编译器查找动态连接库时有隐含的命名...
linux@linux:~/andy/lib/share$ gcc -c -fPIC *.c -Wall linux@linux:~/andy/lib/share$ ls bye.c bye.o common.h hello.c hello.o fPIC选项:告诉编译器生成位置无关代码 位置无关代码:生成的".o文件"文件中的代码可以被加载到任意的地址执行。编译时用到了相对寻址而不是绝对寻址 ...
-fPIC作用于编译阶段,告诉编译器产生与位置无关的代码,则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。 使用ldd可以发现main程序...
保存文件属性的叫inode块:具体大小跟文件系统的版本有关,我的是ext3,128字节。...格式:选项 -I 是指定头文件目录,选项 -L 指定库文件路径,选项 -l 库文件名。...-fPIC: 产生位置无关码 shared: 表示生成共享库格式然后我们来执行: 这里发现报错了,原因是没有发现这个目录或文件。 为什么找不到呢?
gcc -shared -fPIC hello.o -o libhello.so 生成了共享库之后,可以这样来使用共享库: gcc -Wall main.o -o main -L. -lhello 该命令与使用静态库的命令相同,但是在共享库与静态库共存的情况下,优先使用共享库。 共享库有时候并不不在当前的目录下,为了让gcc能够找得到共享库,有下面几种方法: ...