今天接受了一个改造旧项目的任务,据说项目唯独在iOS11上无法运行。这很容易就让我们想到与最近苹果iOS11放弃支持32位应用的事件有关。确实我在平时开发的项目中也没怎么涉及这个问题,这次在升级应用支持64位的过程中还是遇到了些问题,所以在这里总结一下,也许还会有同行的朋友遇到。 一、iOS11停止支持32位的来由 苹果于2013年9月推出了iPhone 5S新手机,采用的全新A7处理器其最大特色就是支持64位运算。64位A7处理器的使用意味着iPhone性能会大有提高,性能和速度更加出色;而要到达到这样的
1. POSIX 线程局限性 : 在 Android , Linux , UNIX , MAC 中可以直接使用 POSIX , Windows 不可以直接使用 ;
网上关于 LuaJIT 的讨论,已经显得有些陈旧。如果你对 LuaJIT 编译 Lua 源文件为具体的 32位或64位字节码,极其具体使用感兴趣的话,不妨快速读一下这篇文章。此文章针对尝试在 iOS 或 Android 上使用 LuaJIT 的小伙伴。限于篇幅,此处假定,你可以成功在 iOS/Android App 中集成了 LuaJIT,并且已经可以执行源码形式的 Lua 文件。
Windows端的java程序使用jni调用C++编写的库,原来实现过在Android和Linux端通过JNI调用C++程序,在Windows端没有实现过,这里记录下几个关键的点;
Boost是一个功能强大、构造精巧、跨平台、开源而且完全免费的C++程序库,有着“C++ '准’标准库”的美誉。 Boost是由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程等。目前已经更新到了1.72.0版本,官网下载地址为:https://www.boost.org/users/history/version_1_72_0.html,由于我之前在自己Windows10系统上安装的是Boost 1.69.0,其源代码下载地址为:https://sourceforge.net/projects/boost/files/boost/1.69.0/,所以本文直接演示在VS2017下使用boost1.69.0版本,使用32位的debug模式进行测试,其他的64位和VS编译器同理。
为什么在讲解音视频之前我需要先讲讲交叉编译呢?因为音视频开发将会涉及到很多三方库,特别是基于C语言的,在iOS和安卓开发中是没办法直接编译这些库,比如常见的MP3音频格式编码LAME,安卓常用的AAC音频格式编码FDK-AAC,视频编解码FFmpeg,等等,都是音视频开发的核心技术。
目前网上找到的ios嵌入nodejs介绍,都是指向nodejs-mobile项目,nodejs-mobile对nodejs项目做了一定魔改,可以预想会难以及时的随nodejs升级,该项目目前的nodejs版本12.19.0,比起官方版本落后太多。而本文介绍的办法只需对nodejs的gyp添加少些修改以支持ios、android的编译,该方式编译的16.16.0版本nodejs已经在真机上测试通过并应用到puerts项目上。而且该修改方式也已经提PR给nodejs官方并合入到主干: libnode for ios app embedding
GMP是一个开源的数学运算库,它可以用于任意精度的数学运算,包括有符号整数、有理数和浮点数,是进行大数运算比较好的选择。
1、linux 64位系统可以运行32位linux程序。需要在linux64位系统新增一些设置:
rem 编译64位boost rem 一直以来都是在Win32环境下Build和使用boost,但现在基本上每天都在64位Win7下工作, rem 所以很有必要把这几天的经验总结下来。和32位环境不同, rem x64环境下编译得先从开始菜单启动Visual Studio的Visual Studio 2008 x64 Win64 Command Prompt进入命令提示符, rem 而不是随便打开任意一个命令行窗口就行。然后转到boost根文件夹,运行bootstrap.bat生成x64版的bjam.exe。然后运行命令: rem bjam --build-type=complete toolset=msvc-9.0 threading=multi link=shared address-model=64 rem 即可生成DLL版平台库,如果要编译静态库版就把shared改为static。 rem 只生成一个库的话加上例如–with-python得编译选项,避免生成东西太多、时间太长。 rem 要有address-model=64属性,如果没有这个属性的话,会默认生成32位的平台库,加入这个选项才能生成64位的DLL。 rem 如果要生成Boost.Python库,需要先下载安装x64版的Python安装包,我用的版本是3.2.3。 rem 在使用这个库编写Python扩展DLL时,默认是使用动态库版的Boost.Python,要使用静态版的必须 rem 在C++项目中定义BOOST_PYTHON_STATIC_LIB宏,这样就不用在使用或发布扩展时带着boost_python-vc90-mt-1_50.dll一起了, rem 当然扩展DLL的尺寸会大些,如果做实验没必要这样,编译又慢生成的文件也大。 rem vs工具链版本:vs2003 : msvc-7.1,vs2005 : msvc-8.0,vs2008 : msvc-9.0,vs2010 : msvc-10.0
armv7是ARMv7-A指令集架构的缩写,其中“A”表示“应用程序级别”。ARMv7-A架构是ARM架构的第七代,支持32位指令和地址。它是2011年前的大多数ARM芯片所采用的架构,包括Cortex-A7、Cortex-A9和Cortex-A15等。
程序员编写的是源代码,而计算机运行的则是CPU能识别的机器指令,因此必须要有一系列工具或程序来将源代码转化为机器指令,这个转化的过程需要经历编译和链接两个主要阶段。所谓编译就是将源代码文件转化为中间的目标文件(Object file)。目标文件的后缀一般为.o。iOS系统的目标文件也是一种mach-o格式的文件,mach-o文件的头部结构体:struct mach_header中的filetype成员字段用来描述当前文件的类型,目标文件所对应的类型是MH_OBJECT。目标文件中的布局结构和内容和可执行文件中的布局结构和内容非常相似,编译后形成的目标文件中的代码段(__TEXT Segment)中的节(__text Section) 中的内容存放的是已经被编译为机器指令的二进制代码了。下面就是一个目标文件的布局结构:
这是MySQL 数据库服务,下载了它才能在自己的电脑中使用MySQL。 下载页面:Download MySQL Installer 参考教程: windows10上安装mysql(详细步骤) 安装好后,我们打开MySQL 5.7 Command Line Client(在开始菜单的快捷方式里,也可以搜索一下),然后
我所使用的是cocos2d-x V2.0版本,而且源码有部分代码是修改过的。好在cocos2d-x官方已经放出了一个支持64位的2.2.6版本,可以做为参考。
进入http://ffmpeg.org/download.html,如果下载源码,则在右下方:
听过Mozilla(火狐浏览器的娘家)的javascript引擎吗?感兴趣吗?想在windows平台的应用开发中使用这个引擎吗?
使用VS2015编译最新的64位GDAL(最新gdal2.11),确实有一些问题,看来双方还是太新了,有点不兼容,特总结如下。
Java中有很多日志库:java.util.logging、Log4j、Logback、Log4j2、slf4j、common-logging。C++的日志库相对来说就比较少了,比如说glog、log4cpp、spdllog等,目前个人感觉比较好用的C++开源日志库当属于spdlog了,跨平台,支持cmake编译,在维护中。 具体可以参考github上面的示例:https://github.com/gabime/spdlog 另外spdlog支持两种使用方式:一种是将源代码目录下的include头文件直接添加到自己的项目中使用;另一种使用cmake编译构建出lib静态库或者dll动态库之后以静态和动态链接方式使用。
用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest ("-Wl"表示是传递给链接器ld的参数,而不是编译器gcc/g++的参数。) 1) 下面是因为没有指定链接参数-lz(/usr/lib/libz.so,/usr/lib/libz.a ) /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_uncompress': /home/software/mysql-5.5.24/mysys/my_compress.c:122: undefined reference to `uncompress' /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_compress_alloc': /home/software/mysql-5.5.24/mysys/my_compress.c:71: undefined reference to `compress' 2) 下面是因为没有指定编译链接参数-pthread(注意不仅仅是-lpthraed) /usr/local/mysql/lib/mysql/libmysqlclient.a(charset.c.o): In function `get_charset_name': /home/zhangsan/mysql-5.5.24/mysys/charset.c:533: undefined reference to `pthread_once' 3) 下面这个是因为没有指定链接参数-lrt /usr/local/thirdparty/curl/lib/libcurl.a(libcurl_la-timeval.o): In function `curlx_tvnow': timeval.c:(.text+0xe9): undefined reference to `clock_gettime' 4) 下面这个是因为没有指定链接参数-ldl /usr/local/thirdparty/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': dso_dlfcn.c:(.text+0x4c): undefined reference to `dlopen' dso_dlfcn.c:(.text+0x62): undefined reference to `dlsym' dso_dlfcn.c:(.text+0x6c): undefined reference to `dlclose' 5) 下面这个是因为指定了链接参数-static,它的存在,要求链接的必须是静态库,而不能是共享库 ld: attempted static link of dynamic object 如果是以-L加-l方式指定,则目录下必须有.a文件存在,否则会报-l的库文件找不到:ld: cannot find -lACE 6) GCC编译遇到如下的错误,可能是因为在编译时没有指定-fPIC,记住:-fPIC即是编译参数,也是链接参数 relocation R_x86_64_32S against `vtable for CMyClass` can not be used when making a shared object 7) 下面的错误表示gcc编译时需要定义宏__STDC_FORMAT_MACROS,并且必须包含头文件inttypes.h test.cpp:35: error: expected `)' before 'PRIu64' 8) 下面是因为在x86机器(32位)上编译没有指定编译参数-march=pentium4 ../../src/common/libmooon.a(logger.o): In function `atomic_dec_and_test': ../../include/mooon/sys/atomic_gcc.h:103: undefined reference to `__sync_sub_and_fetch_4' 9) 下列错误可能是因为多了个“}” error: expected d
这里重点说下,怎样饮用Bundle中的图片资源。这里使用的是简写:@"JWJFramework.bundle/open"其中JWJFramework.bundle是Bundle的名称。
windows下命令编译boost的基本参数说明(以1.62为例): bjam install ^ --prefix=E:\caffe-static\release\boost_windows_vc140_x86_64_md ^ --without-python -a -d+3 -q -j8 ^ --debug-configuration ^ link=static ^ runtime-link=shared ^ toolset=msvc-14.0 ^ address-model=64 ^
通常在程序设计中采用xml、ini、yaml、json等配置文件比较多。在Java的SpringBoot项目中通常采用yaml或者yml文件作为应用的配置项。由于本人在实际项目中采用C++编写控制台程序的过程中使用yaml文件比较多,目前使用比较的多的就是yaml-cpp这个C++ yaml解析库了。之前写过两篇关于在CentOS7下编译yaml-cpp库和Windows10下使用VS2017编译和使用yaml-cpp库的文章。 最近实际项目中换成了最新版的Visual Studio 2019,我使用的Windows系统是Win7和Windows10,所以需要重新编译基于VS2019下的yaml-cpp的Debug和Release版本的Win32的静态lib库,大体步骤和Windows10下使用VS2017编译和使用yaml-cpp库这篇博客描述的一致。
解压boost.python后,用VS的[本机命令提示工具](开始-VS2013-VS Tools)进入到boost的文件夹,运行bootstrap.bat生成bjam.exe。然后运行:
下载lua官方的tar.gz文件( https://www.lua.org/download.html ),解压得到src文件夹
Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。
最近升级了系统到Mac OS X 10.10 并且更新了XCode6.1和iOS 8.1
静态库是一个包含预编译代码的文件,可以与可执行程序链接以创建单个自包含的可执行文件。静态库中的代码直接链接到可执行文件中,这使得它比动态库更快、更高效。
开发项目在嵌入式平台上使用MiniGui作为用户界面开发工具,在工作之余准备在ubuntu14.04上搭建一个测试环境,这样代码测试起来比较方便。
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/80095817
Skia是一个高性能的跨平台2D图形库,由Google开源并维护。Skia能够对字体、坐标转换、点阵图、矢量图以及矢量动画等进行高效的处理,代码结构和接口异常简洁,并且支持OpenGL、Vulkan、甚至OpenCL等硬件加速特性,是一个理想的2D图形库。
随便解压到一个目录,先运行一次命令./configure,如果没错可以进行下一步操作,编写脚本
Linux 从某种意义上来说就是一堆相互依赖的静态和动态库。对于 Linux 系统新手来说,库的整个处理过程简直是个迷。但对有经验的人来说,被构建进操作系统的大量共享代码对于编写新应用来说却是个优点。
首先声明 因为我是在真机上编译的项目,所以报错的架构(CPU指令集)为arm64。 如果我们使用64位模拟器(iPhone simulators 5s 或更高版本)编译或者运行项目,就会报以下错误: Undefined symbols for architecture x86_64: 如果我们使用32位模拟器(iPhone simulators 5 或更低版本)编译或者运行项目,就会报以下错误: Undefined symbols for architecture i386: Undefined sym
刚刚的dlib-19.13\dlib\build目录已经生成/转换为一个vs工程了,直接打开,生成,编译一个Release 64的windows静态库lib
iOS 中的 armv7,armv7s,arm64,i386,x86_64 都是什么 在做静态库的时候以及引用静态库的时候经常会遇到一些关于真机模拟器不通用的情况,会报错找不到相应库导致编译失败,
OpenCV是图像领域经常会用到的工具库函数的集合,有C/C++,Java和Python等语言的接口,并且适用于Windows,Linux,Mac OS桌面开发平台和Android 和IOS移动开发平台。目前已经出了1.x系列和2.x系列,3.0 Beta版也已经出了。OpenCV配置起来还是挺费事的,虽然网上已经有很多很全面也很有用的参考文章,我还是打算把自己配置的过程写下来,以后肯定还会配置这个东西,希望到时候有个方便的参考。
打开Visual Studio,新建一个 Visual C++空项目 ,项目名称为Lua。 打开 项目属性页 ,设置 目标平台(Win32或x64),在 配置属性-常规-项目默认值 中选择 配置类型 为 应用程序(.exe) ,保存更改。 将从Lua源代码压缩包中提取的 src 文件夹复制到项目文件夹中,在 解决方案资源管理器 菜单栏中勾选 显示所有文件 ,然后选择 src 文件夹,通过右键菜单中的 包括在项目中 选项将 src 文件夹添加到项目中。 展开 src 文件夹,选中文件 luac.c ,通过右键菜单的 从项目中排除 选项将文件 luac.c 从项目中移除。 在Visual Studio菜单栏中选择 生成-生成 Lua 来生成可执行程序。
http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520101023104745738/
Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试
于是,上网找相关文章,搜索出来有很多,经过查看,其中的一个英文网站是最好的,网址:
前面一篇文件 https://blog.csdn.net/zhanggqianglovec/article/details/103344658 讲述了如果将多个影像拼接为一个大的影像,本文将讲述 一些上面工具在使用过程中的问题及其优化 1. 问题出现: 首先直接说一下工具上的缺陷: 1.1 该工具依赖的是 x86库,包括opencv 2.4.3 ,cholmod 1.6.0 都是32位的,32和64都会影响工具在处理影像时的性能,比如在处理索尼相机的照片时,分辨率是 6000*4000,20多张照片,在处理到一半时会爆出 申请内存失败的情况。(本地环境为 i5处理器四核,16G内存),处理索尼相机时每张照片都会申请 6000*4000 字节内存块,直接内存爆出内存申请失败。 1.2 该工具迁移到其他机子上会出现不兼容的问题,应为opencv 底层设计到 GPU,CPU等指令,所以在其他机子上 运行,稍微大一点的图片 都会爆出 内存申请失败的问题。 2. 问题定位: 接下来说一下问题的定位 刚开始一直以为是内存的问题,因为在处理小一点的图片时,是没有问题的。在处理所以相机时才会出现;但是当迁移到其他机子上的时候,当地环境是 200G的内存,任然会报出 内存问题,这个就不是内存问题了。然后网上查询,大部分的解决思路 都是 32与64的不兼容。知其然不知其所以然,最后通过仔细的查看爆出来的原因,才豁然大悟,opencv底层调用到了cpu、gpu的指令,然后opencv对底层32/64的支持并不是很好,也就是说 在64环境下调用32 的指令,会出现不兼容的问题,从而导致频繁的爆出内存问题,到此为止,已经定位的差不多了,爆出内存问题只是表象,底层是msvcp.dll/msvcr.dll的执行。 3. 解决之道: 既然问题已经定位到,那么解决之道又是什么,毫无疑问:从底层实现对64的支持,不依赖32位的相关东西。说白了就一句话:重新编译mosaic的所有依赖库,全部换为 64版本 应该就能解决问题。 4. OpenCV 2.4.9 64位的编译 4.1 OpenCV下载: Opencv库的编译相对来说简单,通过Cmake直接可编译,问题是Opencv的源码获取比较麻烦,通过github获取,在git下载过程中时常会出现git下载失败,原因是github连接到了外网,会有网路断开等情况,所以通过github上查找 opencv来下载 还是比较麻烦的,需要多试几次。好在opencv2.4.9 有可执行程序,直接安装 opencv2.4.9 即可安装 他的源码,这个比较好,一下子全部搞定。 4.2 OpenCV工程生成: 在选择 Visual Studio 编译版本的时候需要注意下,Opencv 有区分 X86,X64 和 IA及RAM的编译,这个需要根据自己的情况进行选择,64位环境下一定选择 X64,因为我用的时候 Visual Studio 2010,所以我选择的是 Visual Studio 2010 X64版本,然后点集 Configure,Generate,OpenProject 即可在 Visual Studio 2010中 打开 Opencv 的工程。 4.3 OpenCV 工程编译: OpenCV 工程打开后,找到 ALL_BUILD工程,选择Debug/Release版本,右键build,这个工程只会生成对应的lib库和dll库,并不会生成头文件。 INSTALL工程,该工程首先会执行ALL_BUILD工程,然后复制相关库(lib/dll)到install下的 lib目录和bin目录,复制指定头文件到 include目录,这个工程满足要求,右键 build ,工程执行完毕后会在install目录下生成include目录,bin目录和lib目录。 4.4 Opencv编译完成 5. Cholmod 3.1.0 64位的编译 5.1 Cholmod的获取 网上关于Cholmod的讲解很少,在网上找了很久,找到了SuiteSparse这个产品,SuiteSparse是一个产品套件,里面包含了很多图像相关的处理库,Cholmod只是其中的一部分,而且SuiteSparse目前代码都是针对Linux下的开发,没有针对Windows做 相关的操作,源码目录下不存在cmaketext.txt 文件,不能在windows下直接编译。难道要全部
按照以前的经验,编译Tesseract 3.05就是去GitHub上找一个已经解决了依赖关系(如Leptonica等)的VS2015解决方案,然后在VS中编译生成?是不是最痛苦的地方就是找不到这样的解决方案,或者在自己的Windows中不能正常编译?
我们主要从新建MFC项目,添加函数库讲起,最后通过项目实战——激光振镜打标例程讲解,来让大家熟悉它的项目开发。
在之前的博客中 , 安装了 VS2015 , Qt 5.14.0 , CDB 调试器 , 并在 Qt 中配置了 MSVC 编译器 和 CDB 调试器 ;
转眼之间初中毕业30年了,但我仍清楚的记得初中英语的一篇课文,题目叫《皇帝的新装》(“The king’s new clothes”)。这篇课文的前两句话是:”Long long ago, there was a king. He liked new clothes.“ 因为整篇文章不长,故事生动,文字优美,而且有很多经典的句式,所以当时老师要求要背诵这篇课文,于是学这篇文章的那几天,每天早自习时教室内外都可以听到”Long long ago, there was a king.“
作为iOS,iPadOS、macOS平台的可执行文件格式,Mach-O文件涉及App启动运行、bitcode分析、 crash符号化等诸多多个功能:
「静态库(.a)」:程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。静态库比较占用磁盘空间,而且程序不可以共享静态库。运行时也是比较占内存的,因为每个程序都包含了一份静态库。
此前对 Docker 的理解仅仅停留在:拉取一个基础镜像 → 拷入程序和运行库 → 运行。但最近需要在 SW64 平台验证 Docker 并跑业务,软硬件供应商无法提供配套镜像站,因此需要从零做适配该架构的镜像。
在2021年1月份,cppan的官方网站关闭了,因此现在通过cppan自动下载tesseract所需要的环境依赖从而编译tesseract动态库的方式不可行。tesseract官方文档提供了通过sw下载环境依赖的编译方式,有兴趣的博友可以试试官方文档的方式。在这篇博客中将采用另外一种方式编译tesseract。tesseract依赖于leptonica,而leptonica又依赖于zlib、libjpeg、libpng、libtiff这4个运行库。因此我们一步步进行编译。
领取专属 10元无门槛券
手把手带您无忧上云