把c代码编译成库
❶ 我在乌班图(linux)下将c语言编译成动态链接库(.s0),如何在安卓平台下 通过JNI调用我在linux下的.so
电脑上的CPU为 x86,手机CPU为ARM架构,你的动态链接库必须要ARM版Gcc编译器编译后才能跑在手机上,Android NDK里面附带了一个ARM版的编译器,你用NDK的编译器重新编译,然后就可以用JNI调用了,JNI调用不是一言两语能说清的,有专门的教程,如果嫌麻烦,那就别用C写。如果是做简单的应用,干嘛还要用C语言写,JDK可以满足绝大部分要求,要是嫌麻烦那就还是少碰NDK。
❷ 有个 c 文件,如何才能将其编译成动态链接库
有二个文件,一个 test.h, 一个 test.c
//test.h
#pragmaonce
#ifdef__cplusplus
extern"C"{
#endif
intadd(inta,intb);
#ifdef__cplusplus
}
#endif
//test.c
#include"test.h"
intadd(inta,intb)
{
returna+b;
}
编译,生成动态链接库:
#gcc-g3-Wall-fPIC-shared-olibtest.sotest.c
#ls-l
-rwxr-xr-x1rootroot14618Jul2413:44libtest.so
-rw-r--r--1rootroot63Jul2413:43test.c
-rw-r--r--1rootroot106Jul2413:43test.h
#nmlibtest.so
00000000002006e8a_DYNAMIC
0000000000200890a_GLOBAL_OFFSET_TABLE_
w_ITM_deregisterTMCloneTable
w_ITM_registerTMCloneTable
w_Jv_RegisterClasses
00000000002006c8d__CTOR_END__
00000000002006c0d__CTOR_LIST__
00000000002006d8d__DTOR_END__
00000000002006d0d__DTOR_LIST__
00000000000006b8r__FRAME_END__
00000000002006e0d__JCR_END__
00000000002006e0d__JCR_LIST__
00000000002008b8d__TMC_END__
00000000002008b8A__bss_start
w__cxa_finalize@@GLIBC_2.2.5
0000000000000620t__do_global_ctors_aux
0000000000000550t__do_global_dtors_aux
00000000002008b0d__dso_handle
w__gmon_start__
00000000002008b8A_edata
00000000002008c8A_end
0000000000000658T_fini
0000000000000468T_init
0000000000000600Tadd
00000000000004a0tcall_gmon_start
00000000002008b8bcompleted.6557
00000000000004c0tderegister_tm_clones
00000000002008c0bdtor_idx.6559
00000000000005d0tframe_mmy
0000000000000500tregister_tm_clones
❸ 怎么才能将C语言程序,编译成可执行文件,需要什么库和文件,怎么建立库和文件
需要C语言运行的环境,比如Microsoft Visual C++ 6.0,然后写入可执行的文件,一般的简单函数只需要<stdio.h>
❹ 如何将c语言的math.h编译为静态库在mcu上使用
库函数的源码你是看不到的。要找实现的话得去网络。自带的都是编译好的东西(用到时直接调用)不是原C程序。
至于sin()的实现。如果你学过高数应该知道泰勒展开。
不知道的话直接给你公式:sin(x)=x-(x^3)/3!+(x^5)/5!+...(按这规律求和下去,x是弧度)
用一个for循环。要精确的话循环的次数多些就行
❺ 如何编译C/Fortran动态/静态链接库
首先,传统的编译,也就是
静态编译
是把
源文件
翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。
后来的Java和.NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术
————————————
(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个
库文件
中,这个就是静态库。比如常说的
库函数
printf就是libc里面的函数。
如果有了启动函数(main),main里面使用了printf,就可以通过
静态链接
技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个
闭包
。这个就是静态链接。
可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的
动态库
,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。
由于,
动态链接
技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要
动态链接库
。
❻ 如何编译C和C++代码写的动态库
来来来,新技能,linux下构建lib库的步骤:
1、准备库函数源文件;
my_add.c
int add(int a, int b){ printf("Here is my_add.c\n"); return a+b;}
my_sub.c
int sub(int a, int b){ printf("Here is my_sub.c \n"); return a-b;}
2、生成目标文件;
gcc -c my_add.c my_sub.c
会生成my_add.o,my_sub.o
3、对目标文件归档;
ar crv libmylib.a my_add.o my_sub.o
会生成libmylib.a
4、写头文件;
mylib.h
#ifndef _MY_LIB_H_#define _MY_LIB_H_ int add(int a, int b);int sub(int a, int b); #endif
5、测试程序;
test.c
#include "mylib.h"int main(){ printf(" MAIN:%d\n", add(12,24));}
6、编译测试程序;
gcc test.c -L. -lmylib
答案摘自:log.anycle.com/skill/219.html
❼ c++中如何把类编译成类似于库文件,以后直接包含头文件即可
要写一个dll,还要有一个lib文件,还要导出类等等,蛮复杂的,具体你可以网上查一查
❽ C语言中如何将自己常用的函数封装到编译器的库函数中具体应该怎么做呢
用编译器提供的库管理工具。
C语言的编译器都会提供一个命令行工具,可以把自己编译后的.obj模块加入指定的库文件,以后使用时只需要连接该库文件即可。这个命令行工具通常是lib.exe,用这个工具可以查看库中的模块,可以把模块加入到库中,可以从库中删除模块。这个工具不仅仅是自己建立的库文件的管理工具,可以管理所有的库文件,包括C语言提供的标准库。
❾ 我用c语言写了两个函数,怎么把它变成c的库函数随时调用求解释!
改成。h 放到库文件里
调用函数时 包含这个。h文件即可
