10.7.3 Использование совместно используемой библиотеки в приложении

Предыдущая  Содержание  Следующая V*D*V

Теперь рассмотрим, как использовать созданную библиотеку в приложении. Компоновщик должен знать о внешних ссылках в приложении, чтобы он мог в сгенерированном файле bFLT пометить их как ссылки на разделяемые библиотеки. Для компиляции программы мы должны сделать два следующих шага.

 

Файл: use.c

 

extern void a();

extern void b();

 

main()

{

  a();

  b();

}

 

Компилируем use.c (обратите внимание на shared-library-id=0).
 
m68k-elf-gcc -m68000 -Os -g -fomit-frame-pointer -m68000
-fno-common -Wall -Dlinux -D__linux__ -Dunix
-D__uClinux__ -DEMBED -nostdinc
-I/home/sriramn/work/uclinux/uClinux-dist/include
-I/home/sriramn/work/uclinux/uClinux-dist/include/include
-fno-builtin -mid-shared-library -mshared-library-id=0 -c
-o use.o use.c
 

Связываем (компонуем) use.c с libc и libtest.
 
m68k-elf-gcc -m68000 -Os -g -fomit-frame-pointer -m68000
-fno-common -Wall -Dlinux -D__linux__ -Dunix
-D__uClinux__ -DEMBED -nostdinc
-I/home/sriramn/work/uclinux/uClinux-dist/include
-I/home/sriramn/work/uclinux/uClinux-dist/include/include
-fno-builtin -mid-shared-library -mshared-library-id=0
-Wl,-elf2flt -Wl,-move-rodata -Wl,-shared-lib-id,0
-nostartfiles
/home/sriramn/work/uclinux/uClinux-dist/lib/crt0.o
-L/home/sriramn/work/uclinux/uClinux-dist/lib -L. -o use
use.o -Wl,-R,
/home/sriramn/work/uclinux/uClinux-dist/lib/libc.gdb -lc
-Wl,-R,libtest.gdb -ltest

 

И снова для use.gdb выполняем nm, чтобы увидеть наличие библиотеки.

 

#nm use.gdb | sort

  00000004 T _stext

  00000008 T _start

  00000014 T __exit

  0000001a t empty_func

  0000001c T main

    …

    …

  00000260 B end

  00000260 B _end

  0100001c A __assert

  01000098 A isalnum

  010000b8 A isalpha

  010000d8 A isascii

  010000ec A iscntrl

    …

    …

  010355d0 A __ti16__ptmd_type_info

  010355dc A __ti19__builtin_type_info

  020000cc A a

  020000e4 A b

 

После понимания шагов, необходимых для создания программ для uClinux, перед переносом приложений из стандартного Linux для uClinux, вы также должны понять различные ограничения uClinux.

 

Предыдущая  Содержание  Следующая