如何将内核静态库编译连接到驱动程序中去【转】

转自:http://blog.csdn.net/ganjianfeng2003/article/details/8089551

如何将内核静态库编译连接到驱动程序中去

2010-12-07 08:27 331人阅读 评论(1) 收藏 举报

http://blog.chinaunix.net/u2/61663/showart_2404744.html

 

 

刚上邮箱的时候发现一位网友向我询问这个问题,同时发送了一个链接给我了。

上去一看,上面还留有我以前同样的提问,看看时间,都几年前在别人的帖子里面的提问了。貌似当时我遇到同样问题的时候也是到处发帖回帖询问来着的,问的地方有点多,要不是这位朋友给我链接,早不记得那个链接也有访问过,呵呵。

 

不过再往下看了后才发现,这个问题依然没有给出明确的回答,很多朋友给出的都是应用层库的链接,这和期望的内核层的链接是不一样的。

 

所以我把自己的一点理解写出来,给后面的朋友参考,期望对后来的朋友有所帮助。

 

 

我觉得在驱动程序里面编译链接内核静态库需要从三个方面注意:

1.       首先保证你正确生成了内核库文件,而非应用程序库文件;

2.       其次是除去静态库之外的驱动文件的正确性,包括内核库函数的调用和头文件的申明;

3.       正确修改驱动的Makefile

这几个方面都正确之后,就能正确地将内核库编译进指定的驱动中去。

 

 

下面详细给出个最简单的例子给大家参考,毕竟有代码参考才是大家快速编程的王道。

代码目录结构如下: 


DriverEntry.c


 


Makefile


 


lib


myalib.c


myalib.c


Makefile

 

 

1.         内核静态库文件的生成

 

内核库包含一个myalib.c和myalib.h文件,代码如下:


//myalib.c

void test(void)

{

    printk("A lib test./n");

}

 


//myalib.h

void test(void);

 


# This is the Makefile for parse.

RM = rm -f

 

CCFLAGS = -c

ARFLAG  = -rc

 

CC = gcc

AR = ar

 

lib_OBJECTS  =  myalib.o

lib_SOURCE  =  myalib.c

 

LIB = libtest.a

 

libtest.a:$(lib_OBJECTS)

         $(AR) $(ARFLAG) -o $@ $^

        

$(lib_OBJECTS):$(lib_SOURCE)

         $(CC) $(CCFLAGS) -o $@ $^

 

clean:

         $(RM) $(lib_OBJECTS.o)

         $(RM) $(LIB)

 

在输入终端下执行”make”命令即可生成正确的内核库文件。

时间: 2024-09-13 20:57:32

如何将内核静态库编译连接到驱动程序中去【转】的相关文章

visual studio-VS 2013的静态库编译,为什么release比debug版本还大?

问题描述 VS 2013的静态库编译,为什么release比debug版本还大? 如题,很奇怪,包括从git下载了开源的项目,里面默认建好的项目也是如此,release比debug的还大?咋回事? 解决方案 一般来说我们总是觉得debug版要大一些,因为它有调试符号.但是也不一定如此,release版可能因为代码优化的关系,产生多个代码路径(比如说,同样的代码,编译器可能产生3份,一份基础版本,一份对intel优化,一份对amd优化,运行的时候选择不同的路径) 或者,对一些函数内联展开,这样也会

Xcode 5.1 编译模拟器以及真机都能使用的静态库

Xcode 5.1.dmg 下载地址 http://pan.baidu.com/s/1jGJpKm6   1.新建 Framework & Library 工程 我起名叫ShowInfo,下面为其源码 showInfo.h ========================= #import <Foundation/Foundation.h> @interface ShowInfo : NSObject + (void)showInfo; @end ===================

Linux编译多个不同目录下的文件以及静态库、动态库的使用

先看两篇博文,作为基础知识.如果对C/C++编译链接过程都了解的话,可以跳过不看. http://www.firedragonpzy.com.cn/index.php/archives/2556 http://www.cppblog.com/shifan3/archive/2007/01/05/17325.html     一.  编译不同目录下的多个文件   各个文件的布局如下:         head.h文件的代码:   [cpp] view plaincopy     #ifndef  

静态库和动态库的区别以及使用

问题描述 静态库和动态库的区别以及使用 什么是动态链接库和静态链接库?它们有什么区别?它们分别如何使用? 解决方案 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种.? 静态库和动态库的区别 静态函数库 ??? 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了.当然这也会成为他的....

C++ 调用lib 和 dll的 方法 及 动态库DLL与静态库lib的区别

C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法     1  LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件.然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了). 2  设置工程的 Project Settings来加载DL

演练:创建和使用静态库 (C++)

我们将创建的下一个库类型是静态库 (LIB). 使用静态库是重用代码的一种绝佳方式. 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可. 本演练演示如何完成以下任务: 创建静态库项目. 向静态库添加类. 创建引用静态库的控制台应用程序. 在应用程序中使用静态库的功能. 运行该应用程序. 本主题假定您具备 C++ 语言的基础知识. 如果您是刚开始学习 C++,建议参阅 MSDN Library 中的此教程:第一层:C++ 初学者指南.

在Xcode中创建静态库,并使用Target支持不同平台

      在项目的进行中,即使很忙的项目,花一定的时间重构项目都不失为一件必须做的事.即使没到生死攸关也和项目的健康发展和按时提交 以及老生常谈的后期维护都有很大的关系.       在iOS项目开发中,重用代码的方法有很多种.一般来说,你可以把代码以Template的方式提升成基类子类的形式或者以Strategy的方式提升成 组成的方式.但是当代码量相当大,且在多个项目中共用同一批代码文件的时候,就需要把这些代码组成静态库的方式服用了(在iOS项目中只能使用静态库). 也就是说把这些公用代码

iOS创建与使用静态库_IOS

在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来学习一下"iOS-静态库的创建与使用": (一)iOS静态库.动态库与Framework静态库与动态库的区别 (1)什么是库? 库(Library)直白一点说就是一段编译好的二进制代码,加上头文件就可以供别人使用;(例如: iOS中Objective-C编译下的.h和.m文件,打包静态库后

GCC同时使用静态库和动态库链接

一 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库.使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so.如果要指定为连接静态库则使用: gcc test.cpp -L. -static -ltestlib 使用静态库进行连接.   当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连