导航:首页 > 操作系统 > linuxc编译so

linuxc编译so

发布时间:2023-05-15 19:28:00

A. linux下如何用c++编译so文件,c语言又怎样调用这个so文件

C++编译so文件与C编译so一样都是加参数 -shared

C语言调用C++的so
首先C要调用的C++的函数必须是extern "C"声明的。
其次编译C程序时需要增加链接libstdc++.so(可能名字不打对自己查查)

B. 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

C. 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的语法规范走, 避免不必要的错误.

D. linux的C编程,怎么使用so文件

linux下的.so文件为共享库,相当于windows下的dll文件,使用方法如下:
在你的工程源代码里包含.h头文件,然后可以调用动态库里的函数,在链接的时候加上如下编译器参数:
-l xx.so
如果你的so文件是以lib开头的,还可以直接这样使用:
-lxx
xx是你的.so文件名
其实使用方法和你使用数学库函数是一样的,源代码中添加
#include <math.h>,编译的时候,加上-lm参数。

E. Linux c调用so

实例代码(soTest.c):

1 #include <stdio.h>
2 #include <dlfcn.h>
3
4 int main(int argc, char *argv[]){
5 void * libm_handle = NULL;
6 float (*cosf_method)(float);
7 char *errorInfo;
8 float result;
9
10 // dlopen 函数还会自动解析共享库中的依赖项。这样,如果您打开了一个依赖于其他共享库的对象,它就会自动加载它们。
11 // 函数返回一个句柄,该句柄用于后续的 API 调用
12 libm_handle = dlopen("libm.so", RTLD_LAZY );
13 // 如果返回 NULL 句柄,表示无法找到对象文件,过程结束。否则的话,将会得到对象的一个句柄,可以进一步询问对象
14 if (!libm_handle){
15 // 如果返回 NULL 句柄,通过dlerror方法可以取得无法访问对象的原因
16 printf("Open Error:%s.\n",dlerror());
17 return 0;
18 }
19
20 // 使用 dlsym 函数,尝试解析新打开的对象文件中的符号。您将会得到一个有效的指向该符号的指针,或者是得到一个 NULL 并返回一个错误
21 cosf_method = dlsym(libm_handle,"cosf");
22 errorInfo = dlerror();// 调用dlerror方法,返回错误信息的同时,内存中的错误信息被清空
23 if (errorInfo != NULL){
24 printf("Dlsym Error:%s.\n",errorInfo);
25 return 0;
26 }
27
28 // 执行“cosf”方法
29 result = (*cosf_method)(0.0);
30 printf("result = %f.\n",result);
31
32 // 调用 ELF 对象中的目标函数后,通过调用 dlclose 来关闭对它的访问
33 dlclose(libm_handle);
34
35 return 0;
36 }

在这个例子中主要是调用了 math 库(libm.so)中的“cosf”函数,dlopen函数的第二个参数表示加载库文件的模式,主要有两种:RTLD_LAZY 暂缓决定,等有需要时再解出符号;RTLD_NOW 立即决定,返回前解除所有未决定的符号。另外记得引用包含API的头文件“#include <dlfcn.h>”(^_^)。

F. 请问我有一个.so文件,如何在Linux下编程使用呢

-lxx

xx是你的.so文件名

其实使用方法和你使用数学库函数是一样的,源代码中添加

#include <math.h>,编译的时候,加上-lm参数。

注:linux下的扰裤.so文件为共享库,相当于windows下的dll文件。

(6)linuxc编译so扩展阅读:

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,只生成目标文件。

G. linux的C编程,怎么使用so文件,freeimage的lib使用

楼主您好!
很高兴和您交流。
关于您的描述,我怀疑问题出在:调用动态库的时候,需要对当前目录进行环境变量的设置。
即:export LD_LIBRARY_PATH=/usr/lib/(如果我没记错的话)
之后重启终端,试试。
希望能够帮到您。
祝您愉快!

H. 怎样把.c文件编译成.so文件

.so是linux用的
所以 要生成so 需要用gcc
和生成可执行文件类似,只是增加一些编译选项
命令如下
gcc SOURCE_FILES -fPIC -shared -o TARGET
SOURCE_FILES可以是.c文件,也可以是经过-c编译出来的.o文件
TARGET为so文件。

I. Linux下如何将多个.c文件生成.so文件

头文件只是在开发编译的时候才会用到,生成动态库的时候记得在gcc编译的时加上-fPIC参数

阅读全文

与linuxc编译so相关的资料

热点内容
喷油螺杆制冷压缩机 浏览:579
python员工信息登记表 浏览:377
高中美术pdf 浏览:161
java实现排列 浏览:513
javavector的用法 浏览:982
osi实现加密的三层 浏览:233
大众宝来原厂中控如何安装app 浏览:916
linux内核根文件系统 浏览:243
3d的命令面板不见了 浏览:526
武汉理工大学服务器ip地址 浏览:149
亚马逊云服务器登录 浏览:525
安卓手机如何进行文件处理 浏览:71
mysql执行系统命令 浏览:930
php支持curlhttps 浏览:143
新预算法责任 浏览:444
服务器如何处理5万人同时在线 浏览:251
哈夫曼编码数据压缩 浏览:426
锁定服务器是什么意思 浏览:385
场景检测算法 浏览:617
解压手机软件触屏 浏览:350