gcc -fPIC -shared caculate.c -o libcaculate.so
-fPIC 压制警告
-shared 动态库
-o 生成目标的文件名
caculate.c
gcc -rdynamic -o main main.c
-rdynamic 生成可执行文件
-o 目标文件名
main是linux环境下的一个可执行文件。
main.c
gcc -c main.c -o main.o
gcc -c minus.c -o minus.o
gcc -c mulit.c -o mulit.o
gcc -c plus.c -o plus.o
gcc main.o minus.o mulit.o plus.o -o myapp
② Linux下NDK编译出的SO库能在WIndows下的android工程直接使用么
是在windows下做开发的,但是编译环境还是在linux上。。大体的步骤如下:
1.首先在windows环境下编写工程(eclipse下编写android工程)
2.打开linux开发环境(tcl平台:\\10.120.90.207\longc\workspace\code\project\kernel\android\JB)
3.将运行环境的脚本文件运行./evnsetup:配置android运行环境
/JB/build/
找到envsetup.sh
运行.envsetup.sh(source
envsetup.h或./envsetup)
所有操作都在终端完成
4.将工程文件拷贝到指定目录下(TCL平台下的自带程序在package\TCL_Apps目录下)
5.删除一些文件
保留/res,/src,AndroidManifest.xml三个文件
创建Android.mk(makefile文件,linux下用makefile文件来集成一些命令,运行程序的指令和设置都在此处)Android.mk的编写
6.编译
进入工程文件目录
输入mm命令进行编译。
7.生成apk文件,编译完成
③ linux怎么编译得到so文件
不进行make install安装的话,就在你openssl的源码目录里,当然你config的时候需要指明shared,否则只有.a的,没有.so的。如果config的时候,指定了prefix,那么就到你指定的目录去找,下面应该有个lib目录。如果你的linux自带openssl的话,系统的lib目录下就有。libcrypto和libssl
④ linux 怎么编译.so文件
.so是linux用的 所以 要生成so 需要用gcc 和生成可执行文件类似,只是增加一些编译选项 命令如下 gcc SOURCE_FILES -fPIC -shared -o TARGET SOURCE_FILES可以是.c文件,也可以是经过-c编译出来的.o文件 TARGET为so文件。
⑤ Linux .so库的使用
新建一个sort.c文件,写一个最简单的排序
使用 gcc -o libsort.so -fPIC -shared sort.c 产生libsort.so库。
.so库有两种调用方法:
新建main.c文件:
使用命令 gcc -o main main.c -lsort -L. 编译。
新建main2.c文件:
使用命令 gcc -o main2 main2.c -ldl 编译。动态加载.so库的话需要-ldl。
运行./main2后输出递增序列,调用成功。
⑥ 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
⑦ 请问我有一个.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,只生成目标文件。
⑧ Linux下NDK编译出的SO库能在WIndows下的android工程直接使用么
可以使用的。
解析:首先Android就是Linux内核。
android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。
安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库
android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。
备注:NDK编译步骤:
1.选择 ndk 自带的例子 hello-jni ,位于E:android-ndk-r5sampleshello-jni( 根据具体的安装位置而定 ) 。
2.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:android-ndk-r5sampleshello-jni 目录。
3.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 )
4.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常了。
⑨ linux下c语言编译so问题
不需要在自己的.so中调用别人的.so,只需要编译自己的,编译.so时,系统不会检查未定义的函数。
直接在编译自己的应用程序时链接这两个.so就可以了!
gcc
-o
exec_file
mysrc.c
-L./
-lXXX
-L/usr/lib
-lmysqlclient