热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux下可移植开发方式,Linux可移植性(软件可移植)

Linux可移植性,如何才能实现软件预期的灵活性.不同硬件和软件平台用户都可以不做任何修改或者只做极少的修改就可以使用软件.常见的可移植性需求有:a.平台之间的可移植,例如unix

Linux可移植性,如何才能实现软件预期的灵活性.不同硬件和软件平台用户都可以不做任何修改或者只做极少的修改就可以使用软件.

常见的可移植性需求有:

a.平台之间的可移植,例如unix和linux以及mac

b.linux不同发行版之间

使用可移植函数库并充分使用各种自动配置工具编写的linux可以满足以上要求.

1.抽象层

在linux内核之上穿件标准化函数库,例如glibc.内核只负责处理繁琐的硬件细节.系统工具可以绕开函数库直接使用内核的接口.

2.linux标准化

a.LSB (linux标准化规范 Linux Standards Base)

主要基于POSIX以及单一UNIX规范.

它的目标是:在符合LSB特定版本要求的指定主机架构上,在不同的发行版和同一发行版的不同版本之间提供正真的二进制兼容.

LSB是一个二进制ABI标准.它使用rpm包作为可移植软件包格式概念基础,并对LSB兼容包的命名和内部内容就行了约束.

3.linux软件包开发注意事项

当编写自己的应用程序时,需要在设计中考虑将依赖于哪些外部软件和函数库,哪些软件将由自己交付,如何支持不满足应用程序要求的发行版.

4.可移植的源代码

以上都是linux可移植的泛泛之谈.代码可移植才最重要.

在linux编写的软件不仅仅要运行在相同平台发行版之间可以二进制兼容,还应该在大多数提供正确函数库和必备条件的系统中成功编译.编译过程必须小心的确定不同软件环境之间的差异.

为了辅助不同编译环境之间的源代码级的可移植性,人们创建了gnu的自动化工具autotools.autoconf,autoheader,libtool,automake等许多脚本和工具一起工作构成gnu编译系统.这个工具自动运行一系列的测试以获得对用户所处硬件和软件环境的理解,然后再确定是否可能在这一特定的软件环境中编译软件.当准备号合适的源代码集之后,就可以使用你可能早已熟悉的configure,make,make install,来编译软件了.

a.gnu自动化工具

我们这里组织一个案例hello.c,库libhello,以及configure判定大端小端

hello.c:

#include "hello.h"

int main()

{

print_message("hello world!\n");

#ifdef WORDS_BIGENDIAN

printf("this is a big endian\n");

#endif

return 0;

}

help.c:

include

void print_message(char *msg)

{

printf("the message is %s \n",msg);

}

hello.h:

void print_message(char *msg)

执行以下命令:

gcc -shared -fPIC -o libhello.so help.c

gcc -lhello -L. hello.c

export LD_LIBRARY_PATH=`pwd`

./hello

1)gnu autoconf

configure用于建立包含一个特定系统动态信息的头文件,这些动态信息用于源代码测试.例如,一个编译周期通常会创建一个头文件config.h.它包含很多#define声明对应已经经过测试的特性.如果gnu configyre确定本地的环境适合编译软件,那么这些定义将有助于增加软件的灵活性.因为他们允许必要的时候进行条件代码编译.

以下为一个configure.in的例子:

##这一句是autoconf需要的最低版本

AC_PREREQ([2.68])

##设置软件包的名字,版本号,以及作者邮箱

AC_INIT([hello], [1.0], [[email protected]])

##以下是设置包含进configure中的特征和测试需要.

#设置主机编译还是为另一个目标系统编译

AC_CANONICAL_SYSTEM

#测试目录下是否存在hello.c,用于确保用户在正确的目录下.

AC_CONFIG_SRCDIR([hello.c])

AC_CONFIG_HEADERS([config.h])

# Checks for programs.测试是否存在c编译器

AC_PROG_CC

#测试标准头文件的可用性

AC_HEADER_STDC

#测试大端小端

AC_C_BIGENDIAN

#测试其他的头文件

AC_CHECK_HEADERS

#指定gnu autoconf运行之后输出的文件

AC_OUTPUT(makefile)



推荐阅读
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • [ipsec][strongswan]strongswan源码分析(五)plugin的配置文件的添加方法与管理架构解析
    我们知道,strongswan是基于插件式管理的。不同的插件有不同的配置文件,在这下面,我们以netlink的插件为例:etcstrongswan.dcharonkernel-ne ... [详细]
  • 在ROS系统中,参数读写一般通过xml或者yaml格式的文件,其中yaml用得比较多。这是一种可读性高,轻量级的标记语言,简单好用。对于yaml文件,ros中用的较早版本的yaml- ... [详细]
  • 编译lib手动编译cmake编译gtest测试程序断言和caseFixture使用gmock编译gmock测试程序参考GtestGithub使用gtest(gmock)方便我们编写 ... [详细]
  • 最近自己做一个工具最后涉及到一个存储成bmp位图的形式,由于这部分并不是整个project的重点我就从网上找了例子改了改,但是目前的问题是有很多时候都是存储的bmp全黑,我也并不知道是怎么回事。 ... [详细]
  • 贴图的支持及设置:关于贴图分辨率的支持及设置的用户指南
    http:hi.baidu.comdbfr2011818itemeef1eac8df31a2d69744520b贴图分辨率虚幻引擎3支持的贴图分辨率是从1x1到4096x4096 ... [详细]
  • FluxCD、ArgoCD或Jenkins X,哪个才是适合你的GitOps工具?
    GitOps是一种使用基于Git的工作流程来全面管理应用和基础设施的想法,其在最近获得了极大关注。新一代的部署工具更能说明这一点,它们将GitOps作为 ... [详细]
  • c语言自定义BOOL函数C语言没有BOOL类型变量boolean类型是C++所独有的由于使用BOOL类型可以使代码更具有可读性,很多编程者都在C中自己定义了类似的应用,一般方法有两 ... [详细]
  • 下载器,就是一种网络工具,从网络中接收自己想要的数据。下载器是一个网络客户端。它的下载流程无非就是客户端连接服务器端,然后发送资源下载请求 ... [详细]
  • Matlab中利用mex编译Opencv实现画板绘图功能
    图形绘制是标记和可视化数据的重要方法.通过在Matlab中集成画板绘图功能,可为科学计算提供便利.1设置Matlab支持Opencv编译操作系统:麒麟14.04(基于Ubu ... [详细]
  • cp.php这四个,那么我们如何根据你访问的URL判断涉及到那些PHP文件和模板文件,方便您的进一步修改!好了,现在我们以最 ... [详细]
  • 自定义_自定义AXIIP核(转)
    本文由编程笔记#小编为大家整理,主要介绍了自定义AXI-IP核(转)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
author-avatar
mobiledu2502892377
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有