Ⅰ 怎么让gcc编译出来的so文件不依赖于libgcc
/*main.c*/
#include<stdio.h>
intmain(intargc,char*argv[]){
fprintf(stderr,"argc:%d ",argc);
inti;
for(i=0;i<argc;i++){
fprintf(stderr,"argv[%d]:%s ",i,argv[i]);
}
return0;
}
time gcc -O2 main.c -o main
ldd ./main 返回
linux-vdso.so.1 => (0x00007fff9fbfe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0e88001000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0e883e6000)
size main 查看大小
text data bss dec hex filename
1408 560 16 1984 7c0 main
静态编译(加上-static参数):
timegcc-O2-staticmain.c-omain
ldd./main返回“不是动态可执行文件”。
sizemain查看大小
textdatabssdechexfilename
78276275329632799926c34b6main
Ⅱ 请问我有一个.so文件,如何在Linux下编程使用呢
-lxx
xx是你的.so文件名
其实使用方法和你使用数学库函数是一样的,源代码中添加
#include <math.h>,编译的时候,加上-lm参数。
注:linux下的.so文件为共享库,相当于windows下的dll文件。
linux下编写调用so文件实例
.so是Linux(Unix)下的动态链接库. 和.dll类似.
比如:
文件有: a.c, b.c, c.c
gcc -c a.c
gcc -c b.c
gcc -c c.c
gcc -shared libXXX.so a.o b.o c.o
要使用的话也很简单. 比如编译d.c, 使用到libXXX.so中的函数, libXXX.so地址是MYPATH
gcc d.c -o d -LMYPATH -lXXX
注意不是-llibXXX
test.c文件和一个test.h,这两个文件要生成libsotest.so文件。然后我还有一个testso.c文件,在这个文件里面调用libsotest.so中的函数。
编写的过程中,首先是编译so文件,我没有编写makefile文件,而是参考的2里面说的直接写的gcc命令。
因为so文件里面没有main函数,所以是不可执行的,所以编译的时候要加上-c,只生成目标文件。
Ⅲ 如何用gcc编译生成动态链接库*.so文件 动态库
http://www.linuxidc.com/Linux/2012-09/70502.htm
Ⅳ 如何用gcc编译器生成动态链接库*.so文件(动态库)求解
生成动态链接库的命令行为:
gcc -fPIC -shared -o libstr.so
当将main.c和动态链接库进行连接生成可执行文件 的命令如下:
gcc main.c -L./ -lstr -o main或者gcc -o main main.c -L./ -lstr
测试是否动态链接,如果列出libstr.so, 那么应该是连接正常了ldd main注:1)-L.:表示连接的库在当前的目录中。
Ⅳ (gcc)C++如何加载.so文件
Ⅵ 怎么用gcc生成.so文件
Linux下文件的类型是不依赖于其后缀名的,但一般来讲:
.o,是目标文件,相当于版windows中的.obj文件
.so 为共享库权,是shared object,用于动态连接的,和dll差不多
.a为静态库,是好多个.o合在一起,用于静态连接
.la为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息。可以用如下命令查看*.la文件的格式 $file *.la
*.la: ASCII English text
所以可以用vi来查看其内容。
Ⅶ LLINUX GCC 编译C使用自定义动态链接库.so的问题
1. 可以参考如下关于库文件的文章:http://numanal.com/?p=129
2. 在编译文件时最好用-L指明自定义库的存在回目录, 利用如下任一语句答(.so文件与.c文件在同一目录):
gcc test.c -o test2 -L./verify.so
gcc test.c -o test2 -L.
3. 你这里在的问题应该与编译器的某些兼容性有关, 在实际编写程序的时候最好按gcc的语法规范走, 避免不必要的错误.
Ⅷ 如何用gcc编译生成动态链接库*.so文件
生成动态链接库的命令行为:
gcc -fPIC -shared -o libstr.so
当将main.c和动态链接库进行连接生成可执行专文件 的命令如下:
gcc main.c -L./ -lstr -o main或者属gcc -o main main.c -L./ -lstr
测试是否动态链接,如果列出libstr.so, 那么应该是连接正常了ldd main注:1)-L.:表示连接的库在当前的目录中。
Ⅸ 如何用gcc命令生成一个.so文件或者.a文件
你想生成动态的,就是动态的。想生成静态的就是静态的。
你看到里面有一个文件叫Makefile没有。这个文件里面的规则决定了生成动态还是静态的。绝大多数都是动态的。
生成方法:
用shell进入到这个目录
执行命令
make
即可。
更为详尽的操作,可以打开README文件,看看里面的说明。
Ⅹ linux中把.c的文件编译成.so
就跟用VS编译dll或者lib文件差不多,把代码编译完成以后,命名为相应的后缀就好了。
例如:
gcc -c -fPIC libst.c
生成 libst.o
然后
gcc -shared -fPIC -o libst.so libst.o
生成 libst.so 动态链接库
把libst.so拷贝到系统默认库目录下,比如 /lib, /usr/lib 下
假定有 test.c 要引用这个库
gcc -lst -o test test.c
然后就可以了
假如不能把libst.so拷贝到默认库目录下,比方说放在了
/home/aaa/lib 下
那么就用这样的语句来编译test.c
gcc -L/home/aaa/lib -lst -Wl,-rpath=/home/aaa/lib -o test test.c