精华内容
下载资源
问答
  • 在Linux上开发Android,装手机驱动

    千次阅读 2011-11-13 21:26:57
    相信很多友友也遇到了同样的问题,在Linux上开发Android程序,有真机但却没有驱动,而一般手机的驱动都是Window上的,为此我也烦恼了很久,终于在今天,无意中找到了在Linux上安装Android手机的驱动,其实也不算是...

    相信很多友友也遇到了同样的问题,在Linux上开发Android程序,有真机但却没有驱动,而一般手机的驱动都是Window上的,为此我也烦恼了很久,终于在今天,无意中找到了在Linux上安装Android手机的驱动,其实也不算是安装驱动啦,整个过程,不用下载任何东西,不用安装任何东西,只需写一个文件,就可以了,甚至与Window上安装驱动还方便快捷,我就是用这个方法,让我那台古董机华为C8600能够在Linux识别了,废话不多说,先给出原文链接:

    http://esausilva.com/2010/05/13/setting-up-adbusb-drivers-for-android-devices-in-linux-ubuntu/


    上面链接中的文章是E文的,鄙人英语水平有限,但还是勉强看懂了,下面就简单翻译一下吧:

    1. 首先,我们需要ADT工具包,做Android开发的都知道,这些东西在SDK里面就有了,然后设置环境变量,具体操作我就不说了,度娘或Google吧,当然你也可以在/usr/bin下作一个符号链接到adb那里,总之,能够在Terminal上使用adb命令就行了。

    2. 在 /etc/udev/rules.d/ 下添加一个文件,命名为 ##-android.rules,注意这里的##5070,按照原文的说法是,如果你运行的是Gusty/Hardy/Dapper,那就用50,如果你运行的是 Karmic Koala/Lucid Lynx/Maverick Meerkat那就用70(老实说,这里我没太看明白,我用的是50,所以我加的文件名是50-android.rules


    具体命令你可以用vim来完成,需要管理员权限,如下:

    #sudo vim /etc/udev/rules.d/50-android.rules


    然后在里面加一行文字,注意这里需要找到你手机型号对应的Vendor ID,啥叫Vendor ID?别问我,我也不知道,但原文有给出几种机型的Vendor ID,我在这里把它贴出来:

    USB Vendor IDs

    MANUFACTURER USB VENDOR ID
    Acer 0502
    Dell 413c
    Foxconn 0489
    Garmin-Asus 091E
    HTC (Older Phones) 0bb4
    HTC (Newer phones) 18d1
    Huawei 12d1
    Kyocera 0482
    LG 1004
    Motorola 22b8
    Nexus One/S 18d1
    Nvidia 0955
    Pantech 10A9
    Samsung 04e8
    Sharp 04dd
    Sony Ericsson 0fce
    ZTE 19D2

    如上标红的字体,我的手机是华为的,所以Vendor ID是12d1,找到Vendor ID后,就在刚刚新建的文件中一行:

    SUBSYSTEM=="usb",SYSFS{idVendor}=="12d1", MODE="0666"

    (注意红色字体为Vendor ID)

    最后保存,并给它赋予可读可执行的权限,命令如下:

    #sudo chmod a+rx /etc/udev/rules.d/50-android.rules


    这样子就可以了?别急,重启一下机器,重启后用adb devices命令测试一下,若是有看到 XXXXX      device就说明成功了,虽然我这里的全是问号,现在,可以用adb install来安装apk程序咯!


    ###################################################################

    刚刚发现,在Eclipse上不能直接Run As -> Android Application来调试android程序,提示:

    Failed to install test.apk on device '????????????': adb rejected install command with: device not found

    后来在网上找了很久,看到有个牛人自己修改了adb文件修复了这个问题,再此共享出来,遇到同样问题的友友不访试一下,下载地址:

    http://download.csdn.net/detail/qq280948982/3791652

    下载后将它覆盖到原来SDK下的platform-tools/adb(覆盖之前先备份以防万一),并使用命令:

    #adb kill-server && adb start-server

    然后再用adb devices看下,这时你会发现显示的不再是一串问号了,在Eclipse上也可以直接build程序到真机上了 大笑


    展开全文
  • 概述 epoll是linux提供一种多路复用的技术,类似各个平台都支持的select,只是epoll内核的实现做了更多地优化,可以支持比select更多的文件描述符,当然也支持 socket这种...linux上的大并发的接入服务器,目前

    转载请注明: http://blog.csdn.net/herm_lib/article/details/8192371   O1高地

    概述

    epoll是linux提供一种多路复用的技术,类似各个平台都支持的select,只是epoll在内核的实现做了更多地优化,可以支持比select更多的文件描述符,当然也支持 socket这种网络的文件描述符。linux上的大并发的接入服务器,目前的实现方式肯定都通过epoll实现。


    epoll和线程

    有很多开发人员用epoll的时候,会开多个线程来进行数据通信,比如一个线程专门accept(我个人早些年在FreeBSD用kqueue的时候,由于对内部机制没有基本了解也这样搞),一个线程收发,或者接收和发送都用各自独立的线程。

    通常情况下,accept独立线程是没必要的,accept对于内核而言,就应用程序从内核的未完成的SYN队列读取一点数据而已。具体参见 accept部分:

    TCP三次握手过程与对应的Berkeley Socket APIs的介绍

    收发独立成两个线程也没有必要,因为大部分的应用服务器,通常情况下,启动一个线程收发数据,最大数据的收发量瓶颈在于网卡,而不是CPU;像网游接入服务器配置一个KM的网卡,很少有游戏会申请1G的带宽,那一台机器得有多少数据输入和输出。所以我们通信线程为epoll服务器就够了。


    epoll的基本原理

    为了让某些朋友能读得更连惯,我还是说一下epoll基本原理。

    epoll外部表现和select是一样的。他提供READ, WRITE和ERROR等事件。

    大致流程像下面这样:

    1. 应用注册感兴趣的事件到内核;

    2. 内核在某种条件下,将事件通知应用程序;

    3. 应用程序收到事件后,根据事件类型做对应的逻辑处理。


    原理部分我再说一下,不容易理解的地方,包括水平触发和边缘触发,WRITE事件的事件利用(这个可以结合参考文献1的kqueue的WRITE事件,原理一致的)和修改事件的细节。

    水平触发

    READ事件,socket recv buff有数据,将一直向应用程序通知,直到buff为空。

    WRITE事件,socket send buff从满的状态到可发送数据,将一直通知应用程序,直到buff满。


    边缘触发

    READ事件,socket recv buff有数据了,只通知应用一次,不管应用程序有没有调用read api,接下来都不通知了。

    WRITE事件,socket send buff从满的状态到可以发送数据,只通知一次。

    上面这个解释不知道大家能否理解,也只能这样说了。有疑问的做一下试验。另外,这些细节的东西,前几年固定下来后,这几年做的项目,是直接用的,也就很少在涉及细节,是凭理解和记忆写下的文字,万一有错请指正^-^。


    WRITE事件的利用

    这个还一下不好描述。大概描述一下,详细看参考文献1。大致这样:

    1. 逻辑层写数据到应用层的发送buff,向epoll注册一下WRITE事件;

    2. 这时epoll会通知应用程序一个WRITE事件;

    3. 在WRITE事件响应函数里,从应用层的发送buff读数据,然后用socket send api发送。

    因为我在很多实际项目中,看到大家没有利用epoll的WRITE的事件来发数据,特意地说一下。大部分的项目,是直接轮询应用程序的发送队列,我早期项目也是这么干的。


    epoll的修改事件

    对于这个我的映像比较深刻。epoll的修改事件比较坑爹,不能单独修改某个事件!怎么说呢?比如epoll里已经注册了READ&WRITE事件,你如果想单单重注册一下WRITE事件而且READ事件不变,epoll的epoll_ctl API是做不到的,你必须同时注册READ&WRITE,这个在下面的代码中可以看到。FreeBSD的kqueue在这一点完全满足我们程序员的要求。


    抽象epoll API

    我把herm socket epoll封装部分贴出来,让朋友们参考一下epoll的用法。大部分错误抛异常代码被我去掉了。

    class Multiplexor
    {
    public:
    	Multiplexor(int size, int timeout = -1, bool lt = true);
    	~Multiplexor();
    
    	void Run();
    	void Register(ISockHandler* eh, MultiplexorMask mask);
    	void Remove(ISockHandler* eh);
    	void EnableMask(ISockHandler* eh, MultiplexorMask mask);
    	void DisableMask(ISockHandler* eh, MultiplexorMask mask);
    private:
    	inline bool OperateHandler(int op, ISockHandler* eh, MultiplexorMask mask)
    	{
    		struct epoll_event evt;
    		evt.data.ptr = eh;
    		evt.events = mask;
    		return epoll_ctl(m_epfd, op, eh->GetHandle(), &evt) != -1;
    	}
    private:
    	int m_epfd;
    	struct epoll_event* m_evts;
    	int m_size;
    	int m_timeout;
    	__uint32_t m_otherMasks;
    };
     
    Multiplexor::Multiplexor(int size, int timeout, bool lt) 
    {
    	m_epfd = epoll_create(size);
    	if (m_epfd == -1)
    		throw HERM_SOCKET_EXCEPTION(ST_OTHER);
    	
    	m_size = size;
    	m_evts = new struct epoll_event[size];
    
    	m_timeout = timeout;
    
    	// sys/epoll.h is no EPOLLRDHUP(0X2000), don't add EPOLLRDHUP
    	m_otherMasks = EPOLLERR | EPOLLHUP;
    	if (!lt)
    		m_otherMasks |= EPOLLET;
    }
    
    Multiplexor::~Multiplexor()
    {
    	close(m_epfd);
    	delete[] m_evts;
    }
    
    void Multiplexor::Run()
    {
    	int fds = epoll_wait(m_epfd, m_evts, m_size, m_timeout); 
    	if (fds == -1)
    	{
    		if (errno == EINTR)
    			return;
    	}
    	
    	for (int i = 0; i < fds; ++i)
    	{
    		__uint32_t evts = m_evts[i].events;
    		ISockHandler* eh = reinterpret_cast<ISockHandler*>(m_evts[i].data.ptr);
    		int stateType = ST_SUCCESS;
    		if (evts & EPOLLIN)
    			stateType = eh->OnReceive();
    
    		if (evts & EPOLLOUT)
    			stateType = eh->OnSend();
    
    		if (evts & EPOLLERR || evts & EPOLLHUP)
    			stateType = ST_EXCEPT_FAILED;
    
    		if (stateType != ST_SUCCESS)
    			eh->OnError(stateType, errno);
    	}
    }
    
    void Multiplexor::Register(ISockHandler* eh, MultiplexorMask mask)
    {
    	MultiplexorMask masks = mask | m_otherMasks;
    	OperateHandler(EPOLL_CTL_ADD, eh, masks);
    }
    
    void Multiplexor::Remove(ISockHandler* eh)
    {
    	// Delete fd from epoll, don't need masks
    	OperateHandler(EPOLL_CTL_DEL, eh, ALL_EVENTS_MASK);
    }
    
    void Multiplexor::EnableMask(ISockHandler* eh, MultiplexorMask mask)
    {
    	MultiplexorMask masks = mask | Herm::READ_MASK | Herm::WRITE_MASK;
    	OperateHandler(EPOLL_CTL_MOD, eh, masks | m_otherMasks);
    }
    
    void Multiplexor::DisableMask(ISockHandler* eh, MultiplexorMask mask)
    {
    	MultiplexorMask masks = (Herm::READ_MASK | Herm::WRITE_MASK) & (~mask);
    	if (!OperateHandler(EPOLL_CTL_MOD, eh, masks | m_otherMasks))
    		throw HERM_SOCKET_EXCEPTION(ST_OTHER);
    }
    

    上面类就用到epoll_create(), epoll_ctl()和epoll_wait(),以及几种事件。epoll用起来比select清爽一些。


    大致用法类似下面这样:

    先定义一个Handler

    class StreamHandler : public Herm::ISockHandler
    {  
    public:	
    	virtual Herm::Handle GetHandle() const;
        virtual int OnReceive(int); 
    	virtual int OnSend(int);
    };
    

    在OnReceive()处理收到数据的动作,在OnSend()。。。。

    在通信线程中,大概类似这样的代码,实际看情况。

    Multiplexor multiplexor;
    StreamHandler sh;
    multiplexor.Register(&sh, READ_EVT);
    multiplexor.Run(...);


    参考文献

    1.

    使用 kqueue 在 FreeBSD 上开发高性能应用服务器

    FreeBSD上kqueue和epoll是类似的,有兴趣的朋友请参考。

    http://blog.csdn.net/herm_lib/article/details/6047038

    2. 

    【Herm程序员开发指导】第2章 Herm Framework和网络通信组件

    这里涉及到epoll的通信层如何和逻辑数据交互的问题

    http://blog.csdn.net/herm_lib/article/details/5980657








    展开全文
  • 终于可以在Linux上开发Delphi程序了

    千次阅读 2010-01-08 12:54:00
    Lazacus 是一个开源的基于Pascal的IDE开发软件,和Delphi非常类似,但这是个免费的开源软件,在Linux下安装tar 压缩包就可以装, 本人开始下了rpm包,可是要安许多依赖rpm,没有成功,下了lazarus-0.9.28.2-src.tar.bz2...

    Lazacus 是一个开源的基于Pascal的IDE开发软件,和Delphi非常类似,但这是个免费的开源软件,在Linux下安装tar 压缩包就可以装上,

     

    本人开始下了rpm包,可是要安许多依赖rpm,没有成功,下了lazarus-0.9.28.2-src.tar.bz2解压缩后,打开终端命令窗口,执行

     

    [root@localhost lazarus]#make clean all,就行,非常简单,十多分钟就搞定:

     

    下面是lazarus-0.9.28.2-src.tar.bz2的下载地址:

     

    http://downloads.sourceforge.net/project/lazarus/Lazarus%20Zip%20_%20GZip/Lazarus%200.9.28.2/lazarus-0.9.28.2-src.tar.bz2?use_mirror=cdnetworks-kr-1

     

     

    安装成功后,执行/root/lazarus-0.9.28.2-src/lazarus/lazarus就启动了,我已在Red Flag Linux6.0上安装成功

     

    展开全文
  • C#在Linux上开发指南

    千次阅读 2018-03-02 13:35:25
    原文地址:https://www.cnblogs.com/RainbowInTheSky/p/5496777.html本人才疏学浅,在此记录自己用C#在Linux上开发的一点经验,写下这篇指南。(给想要在Linux上开发C#程序的朋友提供建议)目前在Linux上跑的网站:...

    原文地址:https://www.cnblogs.com/RainbowInTheSky/p/5496777.html

    本人才疏学浅,在此记录自己用C#在Linux上开发的一点经验,写下这篇指南。(给想要在Linux上开发C#程序的朋友提供建议)

    目前在Linux上跑的网站:http://douxiubar.com | http://douxiubar.com/AdminLogin/Index(MVC4+Dapper+Autofac)的一个作品

    在Linux上开发建议上http://www.linuxdot.net/和http://jexus.org/讨论学习,我刚接触那会才知道自己才疏学浅,受益良多(入门题;IntPtr在64位下的长度是多少?嘿嘿)

    指南一:首先正视Linux和win的一些区别,也就是一些常识,win的文件命名不区分大小写,而Linux区分大小写,所以创建文件的时候要注意大小写

    指南二:系统目录的分隔符的不同,可以调用Path.DirectorySeparatorChar做到多平台兼容,另个建议做路径操作多用System.IO.Path,而不是自己去拼接

    指南三:换行符的不同,win的\r\n,linux的\n,可以调用Environment.NewLine做到兼容,而不是自己傻傻的写换行符,也建议看看System.Environment这个类

    指南四:当你想要开发一个程序,既能在Linux运行正常,又能跑win,要注意自己调用的dll走的api是不是有兼容性(比如有些dll里面直接调用了win32的api,你在linux上调用就会不支持)。

    指南五:C#语言本身是免费的,跨平台的,它编译完后是IL也是如此,所以你用VS开发的C#,是可以直接在Linux上运行的(实际承载的runtime才是关键),一句hello world可以跑遍大江南北(win,linux,mac)。

    指南六:如果想在Linux上开发调试,Xamarin Studio符合你的胃口(地址:http://www.monodevelop.com/ Xamarin Studio的前身是monodevelop,而monodevelop的前身是SharpDevelop,可以说源远流长),利用GTK#可以在Linux开发桌面程序,现在最新版本,都可以支持最新的C#编译器。

    指南七:关于创建项目包,vs自带的模板很多配置(比如web.config)和dll,是偏向win的,即使是空项目,也会在Linux上出现错误(跑jexus web服务器),这个时候就要对引用的dll和web.config内的配置做一下清理,去除用不到的东西。(这个时候很多基础差的基本已经懵逼,平常在win上开发,完全没有注意过的要点,就暴露了自己的基础

    指南八:建议项目开发的时候使用条件开发,需要调用平台特性的地方,有针对的进行条件编译,这样可以使得项目更加健壮!

    指南九:Linux上开发C#并不是很难,其实还是简单的,只要你会玩,会看,会解决报错(看懂和解决几百个Exception,做人要仔细,这样你距离大神就不远了)!

    指南十:推荐学习的博客:http://www.cnblogs.com/xiaodiejinghong/,http://www.cnblogs.com/yunei/

    指南十一:不要问Linux开发成熟不成熟,jexus的作者在linux上用C#开发都很多年了。不要问jexus性能怎么样,你实际弄两台相同配置的电脑,一台跑linux+jexus+mono,另一台跑win+iis+.NET FrameWork,用apache的ab工具压测一下即可知道(我怕我说jexus的性能不错,你不信),一切用实际数据说话!

    指南十二:jexus是免费的,但是不开源(想要源码可以和作者商业商量获取,有时候就算给你一个人代码,你也看不懂。。。),但是你不用担心什么,有bug和建议统统可以告诉作者,普通web服务器有的功能,它都有。用jeuxs不只是asp.net的web服务器,用来跑php,java也都可以!

    后续添加的指南 C#在Linux上的开发指南(续)

    目前本人的Cactus项目在linux上运行良好(当然也可以跑win系统)附上项目介绍的地址:http://www.cnblogs.com/RainbowInTheSky/p/5212002.html


    展开全文
  • 在Linux上进行Go开发

    千次阅读 2017-12-24 20:07:00
    在Linux上进行Go开发1.Go安装使用1.1 下载Go源码包$ curl -o './go1.6.3.linux-amd64.tar.gz' 'https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz'1.2 解压缩文件夹到/usr/local目录下先su root,...
  • windows上开发linux程序

    千次阅读 2019-08-30 16:36:03
    由于自己并没有太多的linux下的工作经验,所以不考虑直接在linux平台下工作,开发。 好在现在VSCode,VisualStudio目前都支持跨平台开发。 VSCode有一套remote-xxx的扩展,可以在本机linux子系统,远程主机,...
  • 使用PyCharm在linux上远程开发和调试

    千次阅读 2018-03-30 21:14:58
    1.下载pycharm专业版,安装后需要激活码破解链接:点击打开链接2.使用PyCharm在linux上远程开发和调试点击打开链接
  • 如何在linux开发java程序,或者更具体一点在linux开发java SDK, 首先明确一下几点 开发工具 如果编译 如何运行 如果写单侧 开发工具 编辑器: 可以直接安装PowerVim,这里开发工具已经配置好了 PowerVim主要做...
  • 用QtCreatorCentOS 7 linux上开发c++程序

    千次阅读 2017-04-08 16:13:57
    在windows上习惯了用visual studio + visual assist x 开发之后 就很... 然后又有需要在Linux上写代码, 有些人是用SourceInsight加上samba来写, 我觉得太蹩脚, 而且SourceInsight已经好久没更新过了,应该是不支持c++11
  • Linux开发python

    万次阅读 2019-06-05 11:22:40
    在Linux上开发python 打开控制台端口,执行命令即可 下载python源文件 wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0a1.tar.xz 解压文件 tar xvf Python-3.6.0a1.tar.xz 进入python解压的根...
  • 在linux上搭建javaweb的开发环境

    千次阅读 2011-11-04 13:11:35
    但是在linux操作系统就没那么简单,另外在java这一块许多应用都是部署在linux或者unix操作系统的服务器上面的。因此java程序员也应该知道在linux搭建开发环境,这个也比较重要。废话不多说,就一步一步的来开始...
  • 在Linux上高效开发的7个建议

    千次阅读 2017-06-30 21:07:20
    我们都知道被困一段简单代码数个小时是一个开发者挫败感的...我发现自己经常浪费时间有关Linux的简单事情,而我也曾目睹专家级的开发者仅仅使用合适的工具就节省了大量的时间来避免上述的挫折感的产生。
  • 我们 Linux 系统下一般通过文件$HOME/.bashrc配置自定义环境变量,根据不同的发行版也可能是文件$HOME/.profile,然后使用gedit或vi来编辑文件内容。 export GOROOT=$HOME/go 为了确保相关文件文件系统的任何...
  • 1、Linux上开发Java

    千次阅读 2018-11-06 20:26:44
    1991 年 8 月,芬兰的一个学生 comp.os.minix 新闻组贴了以下这段话: “你好,所有使用 minix 的人 -我正在为 386 ( 486 ) AT 做一个免费的操作系统 ( 只是为了爱好 ),不会像 GNU 那样很大很专业...
  • 开发一个语音通信解决方案是一个软件项目。既然是软件项目,就要有相应的计划:有多少功能,安排多少软件工程师去做,这些工程师这...当时是芯片公司,公司自己的芯片做语音解决方案,增加芯片的卖点,增强...
  • 在linux上进行macos或者ios开发

    千次阅读 2018-12-25 09:56:15
    没有IDE,但通过ToolChain可以开发iOS App。 另外,macos的主流ide是xcode。
  • 微软将开发在Linux上运行的Office

    千次阅读 2006-08-19 23:03:00
    kpld 写道 "Open Source Development Lab (OSDL)的首席执行官Stuart Cohen说:“微软即将开发出一个可以在Linux上运行的Office版本”。在旧金山的LinuxWorld会议上,Stuart Cohen接受vnunet.com的采访说:“他们曾经...
  • 在Linux上部署Java开发环境笔记(二):Linux中安装JDK6.0
  • Linux开发常用命令

    千次阅读 2016-05-27 15:06:22
    在linux上开发已经有一段事件了,发现常用的命令并不多。总结起来方便自己查阅,也希望能帮助大家快速入门。 注 : 解释上可能不怎么专业。 开发的前提肯定是要有项目的,所以第一步要学会从git上clone项目 git ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,799
精华内容 15,119
关键字:

在linux上开发

linux 订阅