Стоит задача - собрать GUI под uCLinux, в качестве GUI решили выбрать FLTK. С компиляцей uCLinux особых проблем не было, все скомпилировалось, прошилось, заработало. На ubuntu FLTK также хорошо скомпилировалось, устанавливалось и заработало, проблемы возникли, когда захотелось собрать FLTK под uCLinux. Дело в том, что uCLinux понимает только формат файлов FLAT, который получается из обычного elf утилитой elf2flt. Пробовал несколько тулчэйнов, и вот результаты работы двух из них: arm-linux и arm-elf. Причем, сам FLTK собирается, не собираются примеры для него.
Так вот, если собирать FLTK с помошью arm-linux, то не получиться скомпилировать примеры, так как elf2flt пишет, что у него проблемы с секцией plt. Кстати так он ругается даже на пустой HelloWorld, не использующий FLTK.
Код
arm-linux-g++ -I.. -I.. -I../png -I../zlib -I../jpeg -I/usr/local/arm-linux/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT -Wall -I. -c a1.cxx -o a1.o
*** Linking a1...
arm-linux-g++ a1.o -Wl,-elf2flt -o a1 -L/usr/local/arm-linux/lib ../lib/libfltk.a -lpthread -lm /usr/local/arm-linux/lib/libNX11.a /usr/local/arm-linux/lib/libnano-X.a
/usr/local/lib/gcc/arm-linux/3.4.4/../../../../arm-linux/bin/ld.real: error: no memory region specified for loadable section `.plt'
collect2: ld returned 1 exit status
make: *** [a1] Error 1
*** Linking a1...
arm-linux-g++ a1.o -Wl,-elf2flt -o a1 -L/usr/local/arm-linux/lib ../lib/libfltk.a -lpthread -lm /usr/local/arm-linux/lib/libNX11.a /usr/local/arm-linux/lib/libnano-X.a
/usr/local/lib/gcc/arm-linux/3.4.4/../../../../arm-linux/bin/ld.real: error: no memory region specified for loadable section `.plt'
collect2: ld returned 1 exit status
make: *** [a1] Error 1
А если собирать с помощью arm-elf тогда при линковке он не может найти функции из библиотеке FLTK, хотя все пути прописаны.
Код
*** Compile a1.cxx...
arm-elf-g++ -I.. -I.. -I../png -I../jpeg -I/usr/local/arm-elf/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT -Wall -I. -c a1.cxx -o a1.o
*** Linking a1...
arm-elf-g++ a1.o -Wl,-elf2flt -o a1 -L/usr/local/arm-elf/lib ../lib/libfltk.a -lpthread -lm /usr/local/arm-elf/lib/libNX11.a /usr/local/arm-elf/lib/libfltk_forms.a /usr/local/arm-elf/lib/libfltk_images.a /usr/local/arm-elf/lib/libfltk_jpeg.a /usr/local/arm-elf/lib/libfltk_png.a /usr/local/arm-elf/lib/libnano-X.a
a1.elf2flt(.text+0x5c): In function `main':
: undefined reference to `Fl_Window::Fl_Window(int, int, char const *)'
a1.elf2flt(.text+0xb0): In function `main':
: undefined reference to `Fl_Window::~Fl_Window(void)'
a1.elf2flt(.text+0xc4): In function `main':
: undefined reference to `Fl_Window::~Fl_Window(void)'
collect2: ld returned 1 exit status
make: *** [a1] Error 1
arm-elf-g++ -I.. -I.. -I../png -I../jpeg -I/usr/local/arm-elf/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_THREAD_SAFE -D_REENTRANT -Wall -I. -c a1.cxx -o a1.o
*** Linking a1...
arm-elf-g++ a1.o -Wl,-elf2flt -o a1 -L/usr/local/arm-elf/lib ../lib/libfltk.a -lpthread -lm /usr/local/arm-elf/lib/libNX11.a /usr/local/arm-elf/lib/libfltk_forms.a /usr/local/arm-elf/lib/libfltk_images.a /usr/local/arm-elf/lib/libfltk_jpeg.a /usr/local/arm-elf/lib/libfltk_png.a /usr/local/arm-elf/lib/libnano-X.a
a1.elf2flt(.text+0x5c): In function `main':
: undefined reference to `Fl_Window::Fl_Window(int, int, char const *)'
a1.elf2flt(.text+0xb0): In function `main':
: undefined reference to `Fl_Window::~Fl_Window(void)'
a1.elf2flt(.text+0xc4): In function `main':
: undefined reference to `Fl_Window::~Fl_Window(void)'
collect2: ld returned 1 exit status
make: *** [a1] Error 1
Сейчас я в замешательстве - не помойму как скомпилировать примеры FLTK в связке с uClinux и nano-X? Может кто подскажет что делаю не так, или даст ссылку на правильный toolchain?