aaa.c中有一个函数

  int myadd(int a, int b){
        return a+b;
  }

并使用以下命令将aaa.c内置到静态库中



和共享库使用



然后,我编写了一个文件call.c,并尝试在libaaa.so中调用函数myadd(),但失败了。

请给我一些建议,
test.c:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");
extern int myadd(int a, int b);
static int hello_init(void)
{
    int c = 0;
    printk(KERN_ALERT "hello,I am Destiny\n");
    c = myadd(1, 2);
    printk(KERN_ALERT "res is (%d)\n", c);
    return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "goodbye,kernel\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("Destiny");
MODULE_DESCRIPTION("This is a simple example!\n");
MODULE_ALIAS("A simplest example");

这个Makefile会将两个c文件都放入call.ko中,并且可以正常工作。但这不是我想要的。
生成文件:
KVERSION = $(shell uname -r)

obj-m       = call.o
call-objs   = aaa.o test.o

Debug:
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules

All:Debug

cleanDebug:
    make -C /lib/modules/$(KVERSION)/build M=/home/Destiny/myProject/kernel/cbtest/ clean

clean:cleanDebug

installDebug:Debug
    rmmod /lib/modules/2.6.18-348.12.1.el5/test/call.ko
    /bin/cp call.ko /lib/modules/$(KVERSION)/test/
    depmod -a
    insmod /lib/modules/2.6.18-348.12.1.el5/test/call.ko

install:installDebug

main.o : defs.h

最佳答案

Ko文件在内核空间(而不是在运行应用程序的用户空间)中运行。 Libc或libc++等为用户空间应用程序准备。因此,您无法链接libc / c++函数,就像无法在内核中链接任何libc函数一样。

10-06 10:18
查看更多