精华内容
下载资源
问答
  • linux生成.so文件和.a文件

    千次阅读 2019-01-23 10:48:37
    原文链接:...   linux生成.so文件和.a文件 test.h 1 #ifndef _TEST_H_ 2 #define _TEST_H_ 3 4 void TestA(); 5 void TestB(); 6 7 #endif   t...

    原文链接:http://www.cnblogs.com/tzhangofseu/archive/2011/11/15/2249585.html

     

    linux下生成.so文件和.a文件

    test.h

    复制代码

    1 #ifndef _TEST_H_
    2 #define _TEST_H_
    3 
    4 void TestA();
    5 void TestB();
    6 
    7 #endif

    复制代码


     

    test_a.cpp

    复制代码

    1 #include <stdio.h>
    2 #include "test.h"
    3 
    4 void TestA()
    5 {
    6     printf("TestA func\n");
    7 }

    复制代码


     

    test_b.cpp

    复制代码

    1 #include <stdio.h>
    2 #include "test.h"
    3 
    4 void TestB()
    5 {
    6     printf("TestB func\n");
    7 }

    复制代码


     

    生成so文件的命令

    g++ test_a.cpp test_b.cpp -fPIC -shared -o libtest.so

    生成.a文件的命令

    1 gcc -c test_a.cpp
    2 gcc -c test_b.cpp
    3 ar -r libtest.a test_a.o test_b.o



     

    test.cpp

    复制代码

    1 #include "test.h"
    2 
    3 int main()
    4 {
    5     TestA();
    6     TestB();
    7 
    8     return 0;
    9 }

    复制代码


     

    采用动态库编译命令

    g++ test.cpp -o test -L. -ltest


     

    执行

    export LD_LIBRARY_PATH=./
    ./test

    执行结果如下。

     

    采用静态库编译命令

    g++ -static -o test -L. -ltest test.cpp

    执行效果


    静态库的嵌套调用,有时候我想做一个自己的静态库,它里面要调用其他静态库里面的函数,经过试验

    这个好像用ar -r不行,所以就在链接的时候需要两个库文件都包含,同时要有这一个头文件才行。。。

    展开全文
  • linux so生成(一)

    2015-01-16 12:09:16
    $gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o 另外再建立两个符号连接: $ln -s libhello.so.1.0 libhello.so.1 $ln -s libhello.so.1 libhello.so 这样一个libhello的动态连接

    Dear!

    先贴个大众版,希望逐字理解,有益!

    $gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o
    另外再建立两个符号连接:
    $ln -s libhello.so.1.0 libhello.so.1
    $ln -s libhello.so.1 libhello.so
    这样一个libhello的动态连接库就生成了。最重要的是传gcc -shared 参数使其生成是动态库而不是普通执行程序。 -Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有 soname名字的文件,而不是库的文件名,换句话说,soname是库的区分标志。 这样做的目的主要是允许系统中多个版本的库文件共存,习惯上在命名库文件的时候通常与soname相同 libxxxx.so.major.minor 其中,xxxx是库的名字,major是主版本号,minor 是次版本号

    Do you understand?

    展开全文
  • 2、g++ -fPIC -shared -o libOnvifSnapShot.so(动态库名字) OnvifSnapShot.cpp(生成动态库所需要的源文件) 已生成。 3、编写main函数并调用动态库,g++ main.cpp -L. -lOnvifSnapShot ,生成a.out ...

    最近在负责一个模块功能的开发,然后需要封装出接口,以前没搞过,在网上搜寻了很多答案,终于搞好了。

    一、首先在Windows上进行封装:

    IDE是vs2017:

    1、首先写好所需的头文件和源文件。接口定义在头文件中,对应的一个源文件是接口的实现。然后移除掉main.cpp.

    2、然后添加def文件,是用来到处接口函数的。

    3、接着编写这个def文件

    格式:LIBRARY

                 EXPORTS

                 这里写接口函数名(不用写函数的返回类型和参数)

    这样def文件就写好了,接下来就可以生成动态库了。

    4、打开项目属性设置页面:

    配置类型选择dll类型。通常 我们所用的生成exe类型。

    5、接着生成解决方案:

    6、现在在项目文件下debug文件夹就可以看到所需的dll和lib了:

    接下来可以测试所生成的dll和lib是否可以使用。

    7、新建一个项目,然后编写main.cpp:

    8、然后把接口所在的头文件和生成的dll,lib添加进来:

    9、关于dll,可以直接放进文件中就行,

    10、大功告成

    成功运行。

    二、Linux相对简单一点

    1、同样是先编写头文件以及对应的源文件。

    2、g++ -fPIC -shared -o libOnvifSnapShot.so(动态库名字) OnvifSnapShot.cpp(生成动态库所需要的源文件)

    已生成。

    3、编写main函数并调用动态库,g++ main.cpp -L. -lOnvifSnapShot ,生成a.out

    已经生成a.out可执行文件。

    4、直接运行./a.out,会出错:./a.out: error while loading shared libraries: libmax.so: cannot open shared object file: No such file or directory,找不到这个库。

    5、把 libOnvifSnapShot.so 所在的路径添加到 /etc/ld.so.conf 中,再以root权限运行ldconfig程序,更新 /etc/ld.so.cache ,a.out运行时,就可以找到 libOnvifSnapShot.so。

    先pwd查看当前.so的路径

    6、然后添加到/etc/ld.so.conf中:

    OK,设置完成,再次运行a.out

    成功运行。

    还有另一种简单的方法,就是为a.out指定 LD_LIBRARY_PATH:输入LD_LIBRARY_PATH=. ./a.out也可以成功运行。LD_LIBRARY_PATH=. 是告诉 a.out,先在当前路径寻找链接的动态库。

    这些都是简单生成动态库过程,自己也在慢慢摸索中,共勉!

    展开全文
  • Linux 生成so库文件并调用

    千次阅读 2019-11-05 17:45:46
    为了不暴露源码,将c文件生成so动态库来给别人调用 记录一下方法 首先简单的创建一些测试文件:test.h a.c b.c c.c 如下: test.h #include <stdio.h> void a(); void b(); void c(); a.c #include "test.h...

    为了不暴露源码,将c文件生成so动态库来给别人调用
    记录一下方法
    首先简单的创建一些测试文件:test.h a.c b.c c.c
    如下:
    test.h

    #include <stdio.h>
    
    void a();
    void b();
    void c();
    

    a.c

    #include "test.h"
    
    void a()
    {
        printf("aaa\n");
    }
    

    b.c

    #include "test.h"
    
    void b()
    {
        printf("bbb\n");
    }
    

    c.c

    #include "test.h"
    
    void c()
    {
        printf("ccc\n");
    }
    

    执行下面命令生成so文件:

    gcc a.c b.c c.c -fPIC -shared -o libtest.so
    

    在这里插入图片描述
    下面写一个测试程序test.c,调用该so文件是否正常:
    test.c

    #include "test.h"
    
    int main()
    {
        a();
        b();
        c();
    
        return 0;
    }
    

    执行下面命令生成test可执行文件:

     gcc test.c -L. -ltest -o test
    

    在这里插入图片描述
    下面执行看下结果:
    在这里插入图片描述
    可以看到能调用函数,证明so文件没问题。
    对上面一些参数解释:
    -shared该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件

    -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

    -Lxxx:xxx表示指定库所在的位置,因为我是当前目录,所以是-L.

    -ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称( l 的意思是lib,ltest即是去找libtest这个so)

    下面介绍一下两个so相关命令
    ldd

    nm命令
    在这里插入图片描述
    可以看出so包含的三个函数,还有其它信息有兴趣自行看资料。

    展开全文
  • linux环境下生成a库和so

    千次阅读 2018-03-20 14:44:06
    一、编译链接库(a库和so库)方法一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,...
  • 主要介绍了linux中把.c的文件编译成.so文件的相关资料,本文以编译mylib.c为例讲如何编译.so文件,感兴趣的朋友跟随脚本之家小编一起学习吧
  • linux生成so库及调用

    2017-07-12 11:35:29
    tof.h #include "stdio.h" void tof(); tof.cpp #include "tof.h" #include using namespace std; void tof() ...生成so 库  gcc tof.cpp -fPIC -shared -o libtof.so -fPIC
  • vs2015跨平台linux开发so库例子,http://www.cnblogs.com/jiftle/p/8401887.html
  • 这是个LINUX生成SO文件,和调用SO库的程序示例.
  • QT在Ubuntu系统的开发,由于Linux系统不支持dll文件,而是支持so文件,因此,需要生成so文件从而能够被qt在Linux系统的调用,还望各位博友多多支持
  • linux生成和调用QT so

    千次阅读 2020-04-09 11:47:42
    生成动态库 1.创建QT项目,创建C++Liberary 一路next,选取模块的时候按需要选择,默认仅选择QtCore模块 2.在自定义的类中写一个hello()的测试函数 XXX_global.h是所有Library项目都有的...一般会有XXX.so.1.0....
  • Linux环境编译ffmpeg生成.so

    千次阅读 2019-03-08 11:58:34
    然后修改configure,如果你不修改的话,编译出来过后的.so文件后面会有一串数字,无法使用,所以得修改他的命名规则 将该文件中的如下四行:(输入/SLIBNAME快速搜索定位) SLIBNAME_WITH_MAJOR='$(SLIBNAME...
  • Linux生成.so文件

    千次阅读 2016-07-28 09:47:00
    linux下的.so文件即Shared Libraries。Shared Library 是程序运行时加载的库文件。当一个shared library 被成功的安装以后,之后启动的所有程序都会自动使用最新的shared library。也就是说,生成一个.so文件并告诉...
  • linux生成.so库,写C++接口

    千次阅读 2018-10-16 10:50:12
    1.写要生成库的头文件和实现文件 IPCz.cpp只需要包含一下头文件即可。 #include"IPCz.h" IPCz.h中需要包含所有的头文件。 #define IPCZ_H #include <stdio.h> #include <cstdlib> #include <...
  • linux调用jni生成so

    2015-08-04 11:29:13
    #include"TestNative.h"; JNIEXPORT jint JNICALL Java_TestNative_add (JNIEnv *ev, jobject obj, jint x, jint y) { return x+y; }
  • linux生成so文件: 准备.cpp文件和.h文件。cpp文件为源码,包含对导出函数的实现,最好使用c来写,方法上使用 extern "C" 修饰,绝对不可使用__stdcall来修饰,此修饰词为Windows文件的修饰词,生成dll时可以加...
  • cpp中添加:int Make_so::add(int a,int b)函数,然后构建,生成:make_so.h、make_so_global.h、libmake_so.so、libmake_so.so.1、ibmake_so.so.1.0、ibmake_so.so.1.0.0 调用.so: 新建工程 test_so 在工程->...
  • 以C语言为例子,Linux下CMake生成和实用动态库基本工程。 本资源主要为了方便自己日后下载,内容在博客里都有:https://blog.csdn.net/a435262767/article/details/91379359
  • Linux上FFmpeg生成so

    千次阅读 2017-12-25 12:18:35
    我用的是ubuntu做开发的,之前使用过centos7去编译的 感觉太麻烦出错了,从朋友那得知ubuntu和debian 是适用于开发的 ...3.把linux版的ndk上传到ubuntu服务器上 4.cd /home/ 切换到home 目录 5.mk
  • 以下是.so库的生成及编译步骤: 如果.cpp文件不多的话,可以将.cpp和.hpp文件都放在一个目录下,依次输入名称进行编译.也可以用指令将整个目录下的.cpp文件全部编译.这里先记录下依次输入名称的方法. 1.对目录下不包含...
  • Linux 下cmake生成SO库的使用实例

    千次阅读 2019-02-13 17:07:42
    so 共享库的使用(被可执行项目调用)创建一个名为test的可执行项目 CMakeLists.txt   #cmake版本 cmake_minimum_required(VERSION 2.8) #项目名:test project(test) # C++11 编译 set(CMAKE_...
  • simlink生成代码下载进Linux步骤,包括从最初新建工程到最后实验现象。
  • .solinux中的生成

    2011-04-22 10:45:32
    Linux中.o,.a,.o,.so文件的意义程实现.可以了解.so文件时怎么生成的,编译,运行的。主要有动态库的编译、动态库的链接、编译参数解析等等
  • Linuxso文件的生成和使用

    千次阅读 2015-09-21 12:48:11
    环境:Vmware Workstation;CentOS-6.4-x86_64 说明: 源文件中不能有main函数;写so文件的时候使用C语言写,不要用C++。 程序: ...1、创建生成so文件的makefile: .SUFFIXES:.c .o CC=gcc SRCS=
  • linux下gfortran 生成so文件

    千次阅读 2019-08-14 13:49:30
    Fortran 90增加了Module的功能,可用来替代common data,打包子程序。因此,一个方便使用的Fortran程序包应该尽量采用module的形式。那么如何使用已经写好的module呢,一个比较...本文介绍在Linux环境下如何使用gf...
  • 动态库的引入及减少了主代码文件的大小,同时生成的动态库又是动态加载的,只有运行的时候才去加载,linux 下的 动态库 .so 就像windows下的 DLL一样。有关动态库的概念自行上网搜。一下是创建及引用动态库 ...
  • 一.linux下运行netcore程序 1.安装linux下的netcore安装包:https://dotnet.microsoft.com/download/dotnet-core/3.1 2.使用dotnet测试安装是否成功 3.在linux下构建netcore项目: (1):新建目录 mkdir test (2):...
  • 一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,在主程序中只需要include含有库中...
  • 最近因为阅读源码的工作,需要自己编译一些 .so 文件或者 .a 文件,查了一些资料,写了一些示例,记录一下。 静态库和动态库 一般程序编译的过程可以分为编译和链接两个阶段。链接阶段,需要把所有的obj文件(.o)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 146,071
精华内容 58,428
关键字:

linuxso生成

linux 订阅