精华内容
下载资源
问答
  • cmake源码静态编译

    2020-06-14 21:44:24
    cmake源码静态编译

    cmake源码静态编译


    如需转载请标明出处:http://blog.csdn.net/itas109
    QQ技术交流群:129518033

    环境:
    OS : centos 7
    编译器: gcc/g++ 4.8.5

    前言

    cmake的源码编译速度很慢,在x86_64架构下cmake有cmake-3.17.3-Linux-x86_64.sh的通用可执行程序。那么这个程序是如何通过源码编译的呢?

    1.cmake直接编译

    git clone https://github.com/Kitware/CMake.git
    
    cd CMake
    ./bootstrap
     make
     sudo make install
    
    $ ldd bin/cmake
            linux-vdso.so.1 =>  (0x00007ffde6cfc000)
            libdl.so.2 => /lib64/libdl.so.2 (0x00007f972a6a5000)
            librt.so.1 => /lib64/librt.so.1 (0x00007f972a49d000)
            libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f972a281000)
            libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f9729f7a000)
            libm.so.6 => /lib64/libm.so.6 (0x00007f9729c78000)
            libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f9729a62000)
            libc.so.6 => /lib64/libc.so.6 (0x00007f9729695000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f972a8a9000)
    

    2.cmake静态编译

    git clone https://github.com/Kitware/CMake.git
    
    cd CMake
    
    vi CMakeLists.txt
    

    增加静态设置

    set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
    

    安装glibc和libstdc++的静态库

    yum install glibc-static libstdc++-static
    

    进行静态编译

    ./bootstrap
     make
     sudo make install
    

    查看链接库,已经没有libstdc++.so.6和libgcc_s.so.1

    $ ldd bin/cmake
            linux-vdso.so.1 =>  (0x00007ffd61da5000)
            libdl.so.2 => /lib64/libdl.so.2 (0x00007f76a406c000)
            librt.so.1 => /lib64/librt.so.1 (0x00007f76a3e64000)
            libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f76a3c48000)
            libm.so.6 => /lib64/libm.so.6 (0x00007f76a3946000)
            libc.so.6 => /lib64/libc.so.6 (0x00007f76a3579000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f76a4270000)
    

    License

    License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎

    如需转载请标明出处:http://blog.csdn.net/itas109
    QQ技术交流群:129518033


    Reference:
    NULL

    展开全文
  • qt5静态编译

    千次阅读 2016-09-03 14:16:59
    静态编译

    qt5静态编译


    “静态编译”就是把支持库文件打包到程序里去.这样,如果对方没装相关环境也照样可以正常使用,所以程序所占空间也就稍微大点。

    静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。


    QT lib库已带 在.pro中如下设置没有用

    CONFIG += static
    QMAKE_LFLAGS += -static

    LIBS += -lQt5Widgets
    LIBS += -lQt5Sql
    LIBS += -lQt5Gui
    LIBS += -lQt5Core


    A:Qt5.1.1\5.1.1\mingw48_32\lib 目录下的文件全部为.a文件,难道不是静态库,是动态库?

    B: Qt发行版是动态库,你所说的lib下的.a文件其实是.dll动态文件的导入库文件,不是真正的静态库文件。明白嘛,想拥有静态库吗?呵呵,这个得您老自己花时间编了

    C:安装上后Qt5Core.lib,Qt5Gui.lib等静态库就很全。都在lib下

    D:如果你编出了静态库了,那程序链接静态库就很简单的说了,就怕你没有编出来,然后呢,就归咎于链接静态库这个操作过程困难,你这就相当于跳了一个大大的台阶了哦……

    Qt程序有可能会依赖各种库,而且应用程序启动的时候并不是在程序所在目录寻找库,所以,虽然你把库拷贝到程序目录,但是程序可能还是不能正常运行,这时候可能就需要更改库目录环境变量了





    展开全文
  • 静态编译是指在链接时把函数库整合到目标代码里面,这样做的优点是静态编译完成后就不再需要外部的函数库来支持了,缺点也显而易见,编译后的程序体量会增大很多,并且如果静态函数库改变了,程序需要重新静态编译。...

    编译是一个把高级语言写成的代码经过一系列的步骤转换成相应处理器汇编语言的过程。

    静态编译

    静态编译是指在链接时把函数库整合到目标代码里面,这样做的优点是静态编译完成后就不再需要外部的函数库来支持了,缺点也显而易见,编译后的程序体量会增大很多,并且如果静态函数库改变了,程序需要重新静态编译。

    生成静态链接库

    静态编译自然不可缺少静态函数库(.a),静态函数库由可重定向文件*.o(也叫目标文件)打包而成:
    在CentOS7环境下:

    gcc -o libmylib.o -c libmylib.c
    ar -rc libmylib.a libmylib.o
    

    这样就会生成静态库libmylib.a

    编译静态库

    编译链接时需要指明头文件路径、库路径及库名称:

    gcc -o main main.c  -I. -L. -l mylib
    

    -I参数指明头文件路径
    -L参数指明库路径
    -l参数指明库名称,注意,这里的库名称要去掉前缀lib(静态库名称默认lib打头)和后缀.a

    如果觉得麻烦,可以将头文件和库分别拷贝至系统指定的默认的头文件目录和库文件目录中,默认头文件路径一般为:/usr/include,默认库路径为:/usr/lib。执行这些操作需要root权限。
    拷贝以后,编译时可以省略-I和-L参数,编译器会去默认路径下查找头文件和库,但-l参数仍要给出以指明库名称。
    此外,也可以由环境变量LIBRARY_PATH指明静态库目录。
    编译链接后,即使删掉静态库,程序也能正常运行。

    动态编译

    不同于静态编译,动态编译在运行时才去调用库函数。所以程序体量比较小,库升级时程序也不需要重新编译,比较方便。

    生成动态库

    动态函数库(.so)生成方式:
    第一步,先生成可重定向文件,不同于静态编译,动态编译要加上-fPIC:

    gcc -fPIC -c mylib.c
    

    第二步,生成函数库(.so)

    gcc -shared -o libmylib.so mylib.o
    

    这两步也可以合起来:

    gcc -fPIC -shared -o libmylib.so mylib.c
    

    这时就会生成mylib.so
    第三步:编译链接
    和静态编译链接一样:

    gcc -o main main.c  -I. -L. -l mylib 
    

    这时会生成一个文件main。
    运行时却报错: error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory
    再来看一下main的信息

    ldd main
    

    其中有一行为:
    libmymath.so => not found
    由此可见,程序在运行时找不到动态库。
    加载动态库的方法:

    1. 将刚生成的动态库拷贝到默认目录/lib或者/usr/lib,然后执行ldconfig命令
    2. 更改环境变量LD_LIBRARY_PATH
    3. 修改/etc/ld.so.conf,把路径添加到文件末尾,然后执行ldconfig命令
    展开全文
  • QT静态编译和动态编译

    千次阅读 2016-07-25 10:18:33
    QT静态编译


    Qt采用编译的方式安装的时候,配置中默认的编译方式是动态编译的,但是有时候你编写的程序要发布出去,带很多动态库文件是很繁琐的,此时就需要静态编译你的程序,Qt要实现静态编译必须库文件也是静态编译的,所以需要下载QT的源码包,先静态编译QT。

    静态编译要用商业版才行
    静态编译需要将整个qt库编译成静态库才行。
    my.oschina.net/weiweiqiao/blog/286487
    有教程,不过别人已经编译好了,你下载使用就行。具体看教程

    展开全文
  • GO 实现静态编译

    2020-08-12 22:14:50
    静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应静态库(.a或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库 Linux环境实现 go 程序的静态...
  • 静态编译与动态编译的区别

    千次阅读 2019-04-18 21:23:28
    静态编译与动态编译的区别  动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统...
  • opencv静态编译

    2016-12-09 16:51:47
    这是为了在没有配置opencv的电脑上运行依赖opencv的程序 Opencv246+vs2012生成不依赖编译环境的exe文件 静态编译与动态编译的区别
  • C++ 静态编译

    千次阅读 2017-01-04 17:20:31
    静态编译静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来, 链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库 ...
  • 动态编译和静态编译;Linux制作动态库和静态库 命名规则 静态库命名规则如下: libxxx.o lib:前缀 .o:静态库 动态链接库(shared object file,共享对象文件)命名规则如下: libxxx.so lib:前缀 .so:动态库 动态库....
  • QT静态编译

    千次阅读 2013-09-17 17:01:46
    Qt默认的编译方式是动态编译的,但是有时候你编写的程序要发布出去,带很多动态库文件是很繁琐的,此时就需要静态编译你的程序,Qt要实现静态编译必须库文件也是静态编译的,可以用以下方法编译静态库: 方法(一): ...
  • 1. 为什么要静态编译程序? 在默认情况下,用QtCreator编译程序时,使用的是动态编译,这就导致编译好的程序在运行时需要另外加上相应的Qt库文件,以及一大堆dll文件。如果想将生成的程序连同所需要的库一起完整地...
  • Qt编译生成静态库(静态编译

    千次阅读 2013-10-14 16:39:24
    Qt编译生成静态库(静态编译
  • 但在编译过程中却无法选择静态编译,问题参见:https://github.com/alanxz/SimpleAmqpClient/issues/113 原来是作者还没添加该功能。。。 不可能因为这一个库去修改整个客户端程序的编译方式,在没
  • Libcurl 静态编译

    千次阅读 2017-10-27 10:07:16
    Libcurl 静态编译一、准备 curl源代码下载,当前使用【curl-curl-7_53_1.zip】版本,编译器使用VS2015 二、编译 打开VS2015 开发人员命令提示,并CD进入 curl-curl-7_53_1/winbuild/ 目录 VS生成代码的时候有一个...
  • apache静态编译和动态编译

    千次阅读 2016-11-05 13:47:46
    Apache拥有4层结构,从核心...静态编译: 编译的时候,所有的模块自己编译进 httpd 这个文件中 ,启动Apache的时候这些模块就已经加载进来了,可以直接来使用,而不用再 httpd.conf 中在 LoadModule 来加载,只要在 中
  • 静态编译和动态编译的区别

    千次阅读 2018-04-28 11:02:44
    静态编译:在编译时确定类型,绑定对象,即通过。 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。 java中的反射就是运用了动态编译创建...
  • 静态编译 静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应静态链接库(.a或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于静态链接库。 动态编译 ...
  • gcc 动态编译 与静态编译

    千次阅读 2017-06-22 12:03:14
    静态编译的程序而言, .o文件中的符号表 一是要对外宣称自己定义了哪些符号, 二是向外宣布自己引用了哪些符号,需要其他模块来支持。 有了这些信息,static linker才能整合各个relocatable object file中的...
  • Visual Studio静态编译

    2017-05-30 10:34:00
    1、Visual Studio静态编译设置: 【Project】—【prj_name Properties】,按例如以下框设置 2、why配置成静态编译? 假设动态编译,在没有安装Visual Studio的PC上。生成的exe文件因缺少动态链接库无法...
  • 需要配置的安装包  apt-get install build-essential libpcap0.8-dev libx11-dev libfreetype6-dev libavahi-gobject-dev libSM-dev libXrender-dev libfontconfig-dev...静态编译Qt 1、下载 qt-x11-ope
  • 静态编译与动态编译

    2012-07-02 21:37:51
    静态编译  静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。 动态编译  是某些...
  • QT5.6.1使用静态编译

    千次阅读 2018-11-12 13:52:18
    Qt项目编译一般使用的是动态编译,这使得一个即使很简单的项目也会需要一些qt的依赖库,使得发布版本的文件比较多,采用静态编译就不会有这些麻烦,不需要依赖库,只需要.exe文件就可以执行,简单方便。下面我就把Qt...
  • 动态编译的可执行文件需要附带一个的动态链接库。在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快...静态编译就是编译器在编译可执行文件的时候,将可执行文
  • 1.静态编译和动态编译 静态编译是程序在编译时就已经确定好了所有类之间的关系,要运行程序所有类 都缺一不可,若在开始运行时就把其中的某类文件丢失,就会产生 NoClassDefFoundError错误,程序会终止,在程序...
  • qt静态编译

    万次阅读 2012-12-16 13:46:38
    QT里部署程序有两种方法:一种是动态编译,一种的静态编译 动态编译需要发布.exe程序的同时,附上dll文件,想Qt里的Qtguid4.dll一个就有160M之巨,对于一般的小程序来说,可能只有小小的几M,所以有很多我们根本用...
  • Windows下Qt静态编译全解

    千次阅读 2019-09-06 07:00:10
    Windows下Qt静态编译全解 (2012-04-16 16:59:05) 转载▼ 标签: 杂谈 分类: QT Windows下Qt静态编译全解(2010-09-08 13:42) 分类:QT 编译准备 下载NOKIA网站上的QT SDK,解压或安装到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,012
精华内容 22,804
关键字:

静态编译