LINUX.ORG.RU

Как отключить экспорт символов из модуля


0

0

Пишу, знакит, я модуль, который состоит из нескольких файлов.

Полсе insmod смотрю /proc/ksysms, а там есть символы из моего модуля, которых, хотелось бы, чтобы там не было.

Проблема вот в чем, модуль могофайловый, все переменные и фунцкции обявленные как static не экспортируются. Экспортируются лишь глобальные переменные и функции, но если их объявить как static, прийдется всё писать в одном файле, что не есть хорошо.

Кто-нибудь сталкивался с такой проблемой?

PS Макросы типа EXPORT_, как я понял, работают только при статической линковке.

anonymous

кажется у ld были ключи соответствующие

SadStork
()

Интересная проблема. Я порылся в манах к ld и gcc и нечего не нашел. Можно ли по подробнее плиз :)

anonymous
()

подумал, вот что надумалось. это на примере простой программы, а не
ядерного модуля. Наверное можно обобщить.

[ragazza ~/test] ls
1.c 2.c Makefile
[ragazza ~/test] cat 1.c
extern void xxx();
int main() {
xxx();
return 0;
}
[ragazza ~/test] cat 2.c
#include<stdio.h>
static void yyy() {
}

void xxx() {
yyy();
printf("xxx!\n");
}
[ragazza ~/test] cat Makefile
test: 1.o 2.o
gcc -o test 1.o 2.o
clean:
rm -f test *.o
[ragazza ~/test] make
cc -c -o 1.o 1.c
cc -c -o 2.o 2.c
gcc -o test 1.o 2.o
[ragazza ~/test] nm test | grep -E 'xxx|yyy'
08048349 T xxx
08048344 t yyy
[ragazza ~/test] objcopy --localize-symbol=xxx test test2
[ragazza ~/test] nm test2 | grep -E 'xxx|yyy'
08048349 t xxx
08048344 t yyy
[ragazza ~/test] objcopy --strip-symbol=xxx test test3
[ragazza ~/test] nm test3 | grep -E 'xxx|yyy'
08048344 t yyy
[ragazza ~/test] ./test
xxx!
[ragazza ~/test] ./test2
xxx!
[ragazza ~/test] ./test3
xxx!

подойдет?

SadStork
()

В принципе подходит. Спасибо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.