‘壹’ linux生成文件中.so 文件和.out文件的区别
.so是二进制格式的链接库文件,包含链接库源文件(.c)中的各函数实现、调试信息等。
.out一般也是由gcc编译生成的二进制格式文件,但有可能是执行程序也可能是链接库文件,因为在linux中扩展名除了一些特殊的约定,一般情况下是无意义的。
执行文件也分动态链接还是静态链接。大多数情况都是动态链接,里面存放源文件(.c)中编译后的二进制代码及所调用函数库的入口参数,静态链接则是all-in-one,就是将所用到的非标准库都打包到执行文件中,所以体积都较大。
‘贰’ Linux下如何将多个.c文件生成.so文件
根据相应的头文件、和链接使用的库文件,编译链接后,即是可以使用该.so文件了
~~~~~~~
‘叁’ 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
‘肆’ linux怎么编译得到so文件
不进行make install安装的话,就在你openssl的源码目录里,当然你config的时候需要指明shared,否则只有.a的,没有.so的。如果config的时候,指定了prefix,那么就到你指定的目录去找,下面应该有个lib目录。如果你的linux自带openssl的话,系统的lib目录下就有。libcrypto和libssl
‘伍’ 对linux 驱动封装成so文件
so文件就是通常说的动态链接库,就跟windows下的dll文件差不多。
ko是内核模块文件,驱动之类的啥的。
不过在linux系统下文件的后缀多数情况下只是个标识,有可能代表不了文件的真实属性的。
至于怎么编写,就跟用VS编译dll或者lib文件差不多,把你的代码编译完成以后命名为相应的后缀就好了。
我了解的一般都是C程序,java属于脚本语言,程序多数情况下是被解释执行的,所以一般不需要编译成库。至于如何编译成库文件,如果你在windows下做过开发的话应该不用我解释太多。实在不知道的话可以再问我哈~~
希望以上回答能对你有所帮助。
‘陆’ 请问我有一个.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 so是什么 文件
.so文件代表Linux的共享函数库文件,程序运行时可能会使用到里面的函数代码。当一个程序需要.so共享函数库文件时,系统自动会把它加载到内存中使用。相当于Windows系统里面的dll动态链接库文件。
‘捌’ 怎样把.c文件编译成.so文件
比如有一个test.c文件,我想打包成动态库test.so,
直接gcc
test.c
-o
test.o
-fpic
gcc
-o
test.so
test.o
-shared
使用的时候发布.so和头文件即可。
链接的时候要记得丢在默认目录或者将其所在目录声明到环境变量,不然有时候会提示找不到这个库文件。
‘玖’ Linux c++开发.so文件的使用
假设在linux上用gcc编译程序,需要用下列编译选项生成.so文件:
gcc -fPIC -shared
.so 文件安装一般是在/usr/lib或者/usr/local/lib下,安装后不需要绝对路径即可使用。当然你也可以安装到工程文件夹下面,不过很少有这么做的。使用时只需要dlopen()函数打开这个库,用dlsym()函数将动态库的函数体加载进来;同样已加载的动态函数库可以用dlclose()关闭。
详细使用方法网络搜dlopen 即可。
‘拾’ linux下ndk-bulid编译形成了so文件,在windows环境下的eclipse怎么使用
可以直接在android工程下使用,因为android就是linux内核。
android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。
2.安装android-ndk开发包,这个开发包可以在google android : 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库
3.android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。
NDK编译步骤:
选择 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 就运行正常啦。