LINUX.ORG.RU

Не могу статически слинковаться с FLTK


0

0

Не могу статически слинковаться с FLTK, точнее с fltk_images.a.
Скажем, на примере компиляции программы sudoku из дистрибутива
fltk-1.1.7, делаю:

$ cd ~/tmp/testsudoku # Сюда скопировал файлы sudoku
$ ls
config.h sudoku-32.png sudoku.ico sudokurc.h
sudoku-128.png sudoku.cxx sudoku.rc sudoku.xbm

$ g++ -o sudoku -lfltk -lfltk_images sudoku.cxx

# Все нормально:

$ ldd ./sudoku | grep fltk
libfltk.so.1.1 => /usr/local/lib/libfltk.so.1.1 (0xb7e76000)
libfltk_images.so.1.1 => /usr/local/lib/libfltk_images.so.1.1 (0xb7e69000)

# Теперь берем статическую fltk

$ rm -f sudoku
$ g++ -o sudoku /usr/local/lib/libfltk.a -lfltk_images sudoku.cxx

# Тоже все нормально, динамический fltk все равно есть, т.к. нужен для fltk_images:

$ ldd ./sudoku | grep fltk
libfltk_images.so.1.1 => /usr/local/lib/libfltk_images.so.1.1 (0xb7f9c000)
libfltk.so.1.1 => /usr/local/lib/libfltk.so.1.1 (0xb7bfd000)

# Теперь fltk и fltk_images -- обе статические:

$ rm -f sudoku
$ g++ -o sudoku /usr/local/lib/libfltk.a /usr/local/lib/libfltk_images.a sudoku.cxx 2>&1 | tail
sudoku.cxx:(.text._ZN9Fl_Window10size_rangeEiiiiiii[Fl_Window::size_range(int, int, int, int, int, int, int)]+0x5e): undefined reference to `Fl_Window::size_range_()'
/tmp/ccSvHd9r.o:(.rodata._ZTV6Sudoku[vtable for Sudoku]+0x10): undefined reference to `Fl_Window::draw()'
/tmp/ccSvHd9r.o:(.rodata._ZTV6Sudoku[vtable for Sudoku]+0x14): undefined reference to `Fl_Window::handle(int)'
/tmp/ccSvHd9r.o:(.rodata._ZTV6Sudoku[vtable for Sudoku]+0x1c): undefined reference to `Fl_Window::flush()'
/tmp/ccSvHd9r.o:(.rodata._ZTV6Sudoku[vtable for Sudoku]+0x20): undefined reference to `Fl_Window::show()'
/tmp/ccSvHd9r.o:(.rodata._ZTV6Sudoku[vtable for Sudoku]+0x24): undefined reference to `Fl_Window::hide()'
/tmp/ccSvHd9r.o:(.rodata._ZTV10SudokuCell[vtable for SudokuCell]+0x18): undefined reference to `Fl_Widget::resize(int, int, int, int)'
/tmp/ccSvHd9r.o:(.rodata._ZTI6Sudoku[typeinfo for Sudoku]+0x8): undefined reference to `typeinfo for Fl_Window'
/tmp/ccSvHd9r.o:(.rodata._ZTI10SudokuCell[typeinfo for SudokuCell]+0x8): undefined reference to `typeinfo for Fl_Widget'
collect2: ld returned 1 exit status

Откуда берутся эти undefined references? Fl_Window, скажем,
определяется в fltk, я ее прилинковываю, так в чем же проблема?
Помогите разобраться.

anonymous

Попробуйте поменять порядок библиотек в коммандной строке. Иногда сие шаманство помогает

rymis ★★
()
Ответ на: комментарий от rymis

Пробовал менять, не помогает :-\

anonymous
()

1. Попробуйте так: g++ sudoku.cxx /usr/local/lib/libfltk.a /usr/local/lib/libfltk_images.a /usr/local/lib/libfltk.a -o sudoku

2. Может кто то стрипнул архивы *.a? ;-)

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