-
2022-01-11 11:29:34
编译环境:ubuntu18.04.5
解压部分就不过多赘述了。直接进入到重点环节:编译部分
以下是代码:sudo ./configure -prefix /opt/Qt5.15.2_static -release -static -c++std c++11 -qt-zlib -fontconfig -system-freetype -qt-libpng -qt-libjpeg -no-xcb -skip qtdeclarative -skip qtandroidextras -nomake examples -nomake tests sudo make sudo make install
在make的过程中出现了一个g++的错误,在网上找寻资料后,参考了以下的博文得以解决,大家要是遇到类似问题也可以参考一下。
报错解决博文更多相关内容 -
linux 静态编译 yara
2021-09-25 11:49:44发现官方只提供了windows的发布程序,linux需要自行编译或者apt yum 安装,但是用户的环境中没有网,无法apt yum,所以只剩下两条路,让用户自己编译yara或者我先编译好再与go程序一起发布。想想第一种方案其实是不...最近有个需求,要在go中调用yara,发现官方的go-yara跨平台做的不是很好,于是决定在go中直接调用外部yara程序,这样只需要写一份代码在windows和linux上都能用了。
发现官方只提供了windows的发布程序,linux需要自行编译或者apt yum 安装,但是用户的环境中没有网,无法apt yum,所以只剩下两条路,让用户自己编译yara或者我先编译好再与go程序一起发布。想想第一种方案其实是不可能的,因为编译yara需要许多工具,也是需要下载的:
sudo apt-get install automake libtool make gcc pkg-config
于是只剩下最后一个方法,自己编译yara。这里就遇到困难了,按照官方编译教程:
./bootstrap.sh ./configure make
编译出来的yara是动态链接的,比如我在ubuntu编译好,拿到centos是无法运行的,缺库。windows只要将需要的dll和exe放在一个目录下就行了,linux却不是这样。
反正就挺折腾的,网上说gcc静态编译出来的程序不是真正的静态编译,可能要换musl之类的编译器才行,这里又因为yara用了configure自动生成makefile,我又不会makefile,就很头大。但是不管怎样现在问题暂时解决了,我在ubuntu编译出yara,file 看是静态链接的,拿到centos也能用,暂时没发现什么异常,所以我就把现在这个可能不是很完美的解决方案记录下来:
如果安装官方的方法编译,出来的程序是 dynamic linked 的。那么应该怎么改呢,参考这篇文章:
https://stackoverflow.com/questions/20068947/how-to-static-link-linux-software-that-uses-configure
所以只需要执行下面的命令就好了:
./bootstrap.sh ./configure CFLAGS="-static" make LDFLAGS="-all-static"
给 configure 和 make 都加上 static 的要求就行了,这有个前提,项目必须包含 libtool 这玩意,yara是符合要求的。
-
Linux静态编译之lpthread库踩坑记录: -static静态编译后,执行程序出现段错误
2022-01-06 14:40:33动态编译正常运行,静态编译后出现段错误 1、动态编译正常,如下图: g++ SDAmqpev.cpp -lamqpcpp -std=c++11 -lev -lpthread -ldl 2、静态编译出现断段错误,如图: g++ SDAmqpev.cpp -lamqpcpp -std=c++11 -lev ...动态编译正常运行,静态编译后出现段错误
1、动态编译正常,如下图:g++ SDAmqpev.cpp -lamqpcpp -std=c++11 -lev -lpthread -ldl
2、静态编译出现断段错误,如图:g++ SDAmqpev.cpp -lamqpcpp -std=c++11 -lev -lpthread -ldl -static
3、GDB排查问题
看上图可知,thread库有问题了!
你可以不使用std:thread这个,改为其他,或者使用下面这个方式编译。4、解决办法:编译条件加入这个**-Wl,–whole-archive -lpthread -Wl,–no-whole-archive**
g++ SDAmqpev.cpp -lamqpcpp -std=c++11 -lev -ldl -static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
PS:在某些地方libpthread. a所有的对象链接在一起,因此这将只是在这个地方可以工作,在其他则需要通过这个条件编译
-Wl,- whole-archive -lpthread -Wl,- no-whole-archive。
简单来说就是:上面这个条件开启后,所有的符号都链接过来,不管你用没用。
link statically maybe not a good idea. -
动态库编译及调用x_linux静态编译
2020-12-23 22:57:32vs2015动态库编译及调用、vs2015动态库编译Qt5.12.1调用、Qt5.12.1编译动态库android apk调用 -
Linux静态编译OpenSSL与libcurl
2020-07-10 21:13:37一、背景 ...二、静态编译OpenSSL 1、下载OpenSSL源码: git clone https://github.com/openssl/openssl.git git checkout -b OpenSSL_1_0_0-stable origin/OpenSSL_1_0_0-stable //分支自己按需选..一、背景
某个工程中需要使用libcurl访问https网站,为了可移植性,需要将libcurl编译成静态的。由于访问的是https开头的网站,所以还需加入对OpenSSL的编译,同样使用编译。
二、静态编译OpenSSL
1、下载OpenSSL源码:
git clone https://github.com/openssl/openssl.git
git checkout -b OpenSSL_1_0_0-stable origin/OpenSSL_1_0_0-stable //分支自己按需选取
git pull2、./config --prefix=/path/to/openssl -fPIC no-shared no-dso no-ssl3 //--prefix指定安装路径
3、make depend
4、make
5、make install
三、静态编译libcurl
1、下载源码包:
https://curl.haxx.se/download/curl-7.29.0.tar.gz(按需选择包版本:https://curl.haxx.se/download/),进入源码目录。
2、./configure --prefix=/path/to/curl --disable-shared --enable-static --with-ssl=/path/to/openssl --without-libidn --without-librtmp --without-nss --without-libssh2 --without-zlib --without-winidn --without-gnutls --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-ldap
3、make
4、make install
四、将OpenSSL与libcurl的库和头文件拷贝到工程相关目录
需要拷贝的文件和文件夹如下:
/path/to/openssl/lib/目录下 libssl.a libcrypt.a
/path/to/openssl/include/openssl 整个目录
/path/to/curl/lib/目录下libcurl.a与libcurl.la(libcurl.la可能不需要,可自行验证一下)
/path/to/curl/include/curl 整个目录
编译时记得加上相应的头文件路径,以及链接时加上 -lcurl -lssl -lcrypt.
全文结束。
-
Qt5.13静态编译及VS2019开发环境配置.pdf
2019-10-15 15:18:25最新版Qt5.13静态库编译方法详细图文说明, 以及演示在VS2019下配置和使用Qt5.13静态库的方法。使用Qt5.13静态库编译后的可执行程序,不需依赖大量的dll文件,一个执行文件即可到处运行。 -
QT5.10.1静态编译版本
2018-03-06 13:24:02在Windows 10下使用MinGW静态编译QT5.10.1之后打包上传到百度网盘的地址,楼主用I5 4200编译了4个多小时。。分享出来方便大家,按照http://blog.csdn.net/spotian/article/details/77413064的教程编译的,测试在QT ... -
Linux 静态库 编译和使用
2022-01-01 23:58:34前言: 不管是 Linux 还是 Windows 中的库文件其本质和工作模式都是相同的,只不过在不同的平台上库对应的...在 Linux 中静态库以 lib 作为前缀,以.a 作为后缀,中间是库的名字自己指定即可,即: libxxx.a 在 Windo -
Linux之静态编译与动态编译
2019-01-24 18:50:14可以事先对这些函数进行编译,然后将它们放置在一些特殊的目标代码文件中,这些目标代码文件就称为库,供其它程序使用(代码的复用) 库文件中的函数可以通过连接程序与应用程序进行链接,这样就不必在每次开发程序... -
linux静态编译curl和openssl
2020-06-19 17:41:51新版本curl在当前环境下测试有bug,旧版本ok,所以不得不静态编译curl。 curl命令需要使用到ssl,为了避免openssl版本问题,所以这里就连同openssl一块编译了 1.首先下载openssl源码编译: openssl下载链接 ./config... -
Linux Qt-5.12.1静态编译
2019-02-20 22:24:321 Linux Qt-5.12.1静态编译 声明:以下仅为个人经验,若有错误地方望指正 1.1 下载Qt-5.12.1源码 下载网站:https://download.qt.io/archive/qt/5.12/5.12.1/single/ 下载qt-everywhere-src-5.12.1.tar.xz的压缩包,... -
linux下使用qt静态编译及打包程序完整教程(亲测可用)
2020-09-24 19:02:14概述 linux上qt程序开发好后会遇到一个问题,就是如何将开发好的程序打包成便于安装的安装包,然后发布给客户使用。这个过程总体可以分为两个...2)使用qt的静态库静态编译qt程序 2.打包编译好的程序 1) 2) 3) ... -
Linux C++编译及 静态/动态 链接库 笔记
2019-08-12 01:26:15NULL 博文链接:https://cherishlc.iteye.com/blog/2265220 -
linux下静态编译libcurl
2018-09-01 16:53:011、下载并解压libcurl源码。 2、运行configure,产生Makefile文件,--frefix表示安装目录。 ./configure --prefix=/home/zhong/curl --disable-shared --enable-static --without-libidn --...4、编译成功。 -
linux动态编译和静态编译
2017-11-27 19:50:22用静态链接库编译生成的可执行文件可直 接运行,不用再调用如.so般的依赖库文件,简单但不灵活。 静态链接库: 1、编译生成目标文件 gcc -c struct.c 2、创建静态库 ar cqs libstruct. -
Linux下的静态编译与动态编译
2019-07-29 17:42:25静态编译是指在链接时把函数库整合到目标代码里面,这样做的优点是静态编译完成后就不再需要外部的函数库来支持了,缺点也显而易见,编译后的程序体量会增大很多,并且如果静态函数库改变了,程序需要重新静态编译。... -
CMake纯静态编译
2021-05-11 23:39:57为什么要静态编译部署程序的时候经常需要编译成纯静态的二进制文件。相比动态链接,好处是很明显的:无需依赖,在linux平台上畅通无阻,无需在环境中部署所需的动态库执行速度更快?但也有一些坏处:内存占用较大... -
QT5.9.6静态编译环境设置
2018-10-13 09:40:31QT5.9.6静态编译环境设置,亲测以后整理,放心使用。编译已经通过! -
Qt5.5.0在Linux下静态编译
2018-08-27 22:25:46本文章主要介绍Linux下QT静态编译环境的搭建,以及如何编译我们的程序board_driver。 1. 下载QT5.5.0源码 进入http://download.qt.io/official_releases/qt/5.5/5.5.0/single/ 下载qt-everyw... -
boost linux下静态库编译
2020-07-26 22:07:14以编译1.72为例 /bootstrap.sh ./b2 -a cxxflags='-fPIC -std=c++11' install --prefix=/home/install/boost/boost_1_72_0 link=static threading=multi . -
Linux下g++编译与使用静态库和动态库的方法
2020-08-30 11:41:27下面小编就为大家带来一篇Linux下g++编译与使用静态库和动态库的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
libcurl在linux下编译好的静态库 支持ssl
2017-10-12 14:36:14libcurl在linux下编译好的静态库libcurl.a,支持ssl功能,可发送http、https请求,已运用于项目中,运行良好。 -
使用openCV的静态库编译
2021-05-13 03:47:52转载请注明出处:By 少侠阿朱摘要:本文主要讲述如何使用opencv静态库进行编译,生成脱离opencv环境可执行.exe文件。实现的效果:此方法生成的exe文件在其他没有配置openCV环境的电脑上可直接执行。使用到的工具:... -
rust 静态编译可执行文件指南
2019-01-08 15:14:27Rust 静态编译可执行文件指南Rust简介Rust默认运行时环境使用MUSL进行静态编译使用预置好的Docker容器进行MUSL编译 Rust简介 Rust是一门强调安全、并发、高效的系统编程语言。无 GC 实现内存安全机制、无数据竞争... -
Linux下编译一个静态库的Makefile
2022-05-12 19:14:20编译json静态库,只是用来作练习,记录一下,供以后查找方便。目录结构如下: 所需头在目录include/json 下,源文件在src目录下,Makefile如下: COMPILE_DIR = compile LIB_DIR = lib #CROSS = arm-himix... -
Linux下快速静态编译Qt以及Qt动态/静态版本共存
2016-12-24 16:38:22Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-opensource-src的tar包,到网上一查,乖乖,大... -
Linux中制作c静态库 及其 优缺点
2022-01-25 20:31:103.编译为obj文件 4.打包为静态库 并移动到lib文件中 5.此时只使用include中的接口和 lib中的静态库 ,即可: 编写测试类main: 编译并运行: ----- 注意:静态库的命名格式为 lib +名称+ .a 调用... -
VC , Linux 静态编译与动态编译 (MD, MT)
2014-06-13 09:45:54首先从Linux下开始讲起,因为Linux编程对程序的理解要清楚一些,相比之下VC就比较容易糊涂。 当动态编译时,你发布的...静态编译的目的是使发布的程序可以独立运行,不依赖于其他*.so,在技术上是把所有依赖的符号 -
Linux编译动态库 静态库
2021-11-11 17:19:50Linux 编译生成库文件的命令将 share.c 编译生成一个动态库: gcc share.c -o libshared.so -shared -fPIC 将 static.c 编译生成一个静态库: 方式一: gcc -o static.o -c static.c ar -r libstatic.a ...