ld:0711-224警告:重复符号(在AIX中覆盖系统调用)

时间:2014-01-13 11:58:54

标签: unix kernel aix kernel-extension

我读了这篇文章(http://qasim.zaidi.me/2009/05/overriding-system-call-in-aix.html;)关于覆盖aix中的系统调用;

我编写了两个内核扩展,就像文章中说的那样“第一个内核扩展只会用不同的名称重新导出原始系统调用。第二个,实际上会通过重新定义它来覆盖系统调用,然后调用原始调用由第一个模块导出。“

但是当我进行第二次扩展时出现错误:

1> gcc -O2 -maix64 -ffreestanding -o my_syscall.o -c my_syscall.c -D_KERNEL
1> ld -b64 -o my_syscall my_syscall.o -e my_syscall_init -bI:/home/rabbitte/output/test_system/my_syscall.exp -bI:/usr/lib/kernex.exp -lsys -lcsys 
1>ld : 0711-224 warning : Duplicate symbol: .getpid
1> ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.

文件“/home/rabbitte/output/test_system/my_syscall.exp”是第一个扩展名的导出文件。 我不明白“重复符号:.getpid”的含义。你能告诉我如何解决这个问题吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

原因是文件“kernex.exp”还包含符号“getpid”。我应该在文件kernex.exp中注释getpid。

答案 1 :(得分:0)

我从来没有做过这些,所以这可能不足以解决您的问题,但您的链接器行有两个-bI选项。根据您指向的文档,AIX kernex.exp应为-bI-bE文件应为exp