Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器 软件资源

软件开发小程序制作系统集成与运维空间租用硬件开发视频监控技术咨询与支持——联系电话:0311-88999002/88999003

首页 / 操作系统 / Linux

Android开发实践:在任意目录执行NDK编译

Android开发实践:在任意目录执行NDK编译

前面一篇文章简单地介绍了Android ndk编译的一些命令行参数(http://www.linuxidc.com/Linux/2014-12/110167.htm),一般情况下,我们都是在Android工程的jni目录下编译本地代码,或许用不到那些参数,但是如果你需要将一些第三方C/C++库,如ffmpeg、libjpeg等,编译为Android可使用的静态库/动态库,那么,你就得尝试在这些第三方库的源码目录中,配置Android的编译环境,使用NDK提...
Android开发实践:Android交叉编译工具链的使用

Android开发实践:Android交叉编译工具链的使用

前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件。http://www.linuxidc.c...
如何创建和使用Python CGI脚本

如何创建和使用Python CGI脚本

你是否想使用Python语言创建一个网页,或者处理用户从web表单输入的数据?这些任务可以通过Python CGI(公用网关接口)脚本以及一个Apache web服务器实现。当用户请求一个指定URL或者和网页交互(比如点击""提交"按钮)的时候,CGI脚本就会被web服务器启用。CGI脚本调用执行完毕后,它的输出结果就会被web服务器用来创建显示给用户的网页。配置Apache web服务器,让其能运行CGI脚本在这个教程里,我们假设Apache web服务...
为什么 C++ 成员函数指针是 16 字节宽的

为什么 C++ 成员函数指针是 16 字节宽的

当提及指针时,我们通常认为它是可以用void * 指针表示的在x86_64架构上占用8字节的东西。例如, 维基百科有一篇关于x86_64的文章中这样写道:Pushes and pops on the stack are always in 8-byte strides, and pointers are 8 bytes wide.从CPU的角度来看,指针就只是一个内存地址,并且x86_64中的所有内存地址用64位表示,所以8字节的假设是成立的。其实可以简单...
Android仿微信录音功能,自定义控件的设计技巧

Android仿微信录音功能,自定义控件的设计技巧

讲解一个比较通用的录音控件实现方法与设计技巧最近由于需要做一个录音功能(/嘘 悄悄透露一下,千万别告诉红薯,就是新版本的OSC客户端噢),起初打算采用仿微信的录音方式,最后又改成了QQ的录音方式,之前的微信录音控件也就白写了[大哭]。之前有很多朋友在问我自定义控件应该怎么学习,遂正好拿出来讲讲喽,没来得及截效果图,大家就自己脑补一下微信发语音时的样子吧。所谓自定义控件其实就是由于系统SDK无法完成需要的功能时,通过自己扩展系统组件达到完成所需功能做出的控件...
浅谈 C++ 中的 new/delete 和 new[]/delete[]

浅谈 C++ 中的 new/delete 和 new[]/delete[]

在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢?new 和 delete 是函数吗?new [] 和 delete [] 又是什么?什么时候用它们?你知道 operator new 和 operator delete 吗?为什么 new [] 出来的数组有时可以用 delete 释放有时又不行?…如果你对这些问题都有疑问的话,不妨看看我这篇文章。new 和 delete 到底是什么?如果...
C 语言中 setjmp 和 longjmp

C 语言中 setjmp 和 longjmp

在 C 语言中,我们不能使用goto语句来跳转到另一个函数中的某个label处;但提供了两个函数——setjmp和longjmp来完成这种类型的分支跳转。后面我们会看到这两个函数在处理异常上面的非常有用。setjmp 和 longjmp 使用方法我们都知道要想在一个函数内进行跳转,可以使用goto语句(不知怎么该语句在中国学生眼中就是臭名昭著,几乎所有国内教材都一刀切地教大家尽量不要使用它,但在我看来,这根本不是语言的问题,而是使用...
Linux 内核进程管理之进程ID

Linux 内核进程管理之进程ID

Linux 内核使用task_struct数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。该数据结构在内核文件include/linux/sched.h中定义,在Linux 3.8 的内核中,该数据结构足足有 380 行之多,在这里我不可能逐项去描述其表示的含义,本篇文章只关注该数据结构如何来组织和管理进程ID的。进程ID类型要想了解内核如何来组织和管理进程ID...
Linux Core Dump

Linux Core Dump

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调...
Linux 下系统调用的三种方法

Linux 下系统调用的三种方法

系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口。当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系统调用函数。下面介绍Linux 下三种发生系统调用的方法:通过 glibc 提供的库函数glibc 是 Linux 下使用的开源的标准 C 库,它是 GNU 发布的 libc 库,即运行时库。glibc 为程序员提供丰富的 API(Application Pr...
Linux Kernel代码艺术——系统调用宏定义

Linux Kernel代码艺术——系统调用宏定义

我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量、宏、函数等的定义处。但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数名的特点是sys_×××,例如我们想找open函数的内核系统调用代码,在SI提供的符号表中搜索sys_open,能找到函数的声明:asmlinkage long sys_open(const char __user *fil...
Python 数据类型及其用法

Python 数据类型及其用法

本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁。基本结构我们首先要看的是几乎任何语言都具有的数据类型,包括字符串、整型、浮点型以及布尔类型。这些基本数据类型组成了基本控制块,从而创建我们的Python应用程序。字符串字符串(String) 是一段文本字符,通常以某种形式向用户输出。如果我们打开Python的解释器,我们试着最常见的输出“Hello World!”应用:>>> p...
Java多个线程之间处理共享数据的方式

Java多个线程之间处理共享数据的方式

题目要求:有4个线程,其中两个线程每次对x加1,另外两个每次对x减1,如何实现?分析:x就是这4个线程要处理的共享数据,不同种线程有不同的处理方式,但操作的数据是共同的,联想到“窗口买票问题”,但是卖票只是单纯的减。所以,多个线程访问共享对象或数据的方式,先看,如果每个线程执行的代码相同,那么就可以使用同一个Runnable对象,这个对象中有被共享的数据,如买票问题。如果每个线程执行的代码不同,肯定需要不用的Runnable对象,有...
Java线程范围内的共享数据

Java线程范围内的共享数据

线程范围内的共享数据,在JavaEE中比较常用,Android比较少。一个线程调用A,B,C三个模块,模块中的表达式或变量调用访问一个数据,这个数据可以是静态的。另一个线程也调用A,B,C三个模块,模块中的表达式或变量访问的数据,就不是刚才的数据,而是另一个同样的代码,一个线程身上一分数据import java.util.HashMap;import java.util.Map;import java.util.Random;public class Th...
Object-C 数组使用详解

Object-C 数组使用详解

一. 一维数组1. 一维数组定义(1) 数组定义数组定义格式 : type arrayName[len];-- 默认初始化 : 注意 数组定以后, 如果是 int 数组默认初始化为 0, 如果是浮点型 默认元素为 0.0, 如果是 指针类型数组 默认类型 null;(2) 数字地址计算数组元素地址性质 : 数组元素是连续存放的;-- 数组首地址 : 数组变量是一个指针, 其存放了数组中元素的首地址;-- 元素地址计算公式 : 元素地址 = 数组首地址 + ...
Python中的True, False条件判断

Python中的True, False条件判断

对于有编程经验的程序员们都知道条件语句的写法:以C++为例:if (condition){ doSomething();}对于Python中的条件判断语句的写法则是下面的样子:if (condition): doSomething()那么对于条件语句中的condition什么时候为真什么时候为假呢?在C++/Java等高级语言中,如果条件的值为0或者引用的对象为空指针,那么该条件即为False。在Python中如果condition为 "",(),[]...
<< 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 >>