LINUX.ORG.RU

Объясните пожалуйста как компилировать приложение

 ,


0

1

Всем доброго времени суток! В Линуксе я еще новичок, поэтому просьба не пинать за глупый вопрос. Мне нужно собрать программу из исходных кодов extundelete. Стадия configure проходит нормально, а когда пишу make, вот что выдает компилятор:

make -s all-recursive
Making all in src
extundelete.cc: В функции «blk64_t extundelete_inode_table_loc(ext2_filsys, dgrp_t)»:
extundelete.cc:131:29: ошибка: invalid use of incomplete type «struct opaque_ext2_group_desc»
In file included from extundelete.cc:94:0:
/usr/include/ext2fs/ext2fs.h:202:8: ошибка: forward declaration of «struct opaque_ext2_group_desc»
extundelete.cc:131:30: ошибка: invalid use of incomplete type «struct opaque_ext2_group_desc»
In file included from extundelete.cc:94:0:
/usr/include/ext2fs/ext2fs.h:202:8: ошибка: forward declaration of «struct opaque_ext2_group_desc»
extundelete.cc: В функции «void print_version()»:
extundelete.cc:383:49: ошибка: expected primary-expression before «<<» token
extundelete.cc: В функции «int restore_inode(ext2_filsys, ext2_filsys, ext2_ino_t, const string&)»:
extundelete.cc:1726:30: предупреждение: сравнение знакового и беззнакового целых выражений [-Wsign-compare]
extundelete.cc: В функции «blk64_t extundelete_inode_table_loc(ext2_filsys, dgrp_t)»:
extundelete.cc:133:1: предупреждение: control reaches end of non-void function [-Wreturn-type]
make[2]: *** [extundelete-extundelete.o] Ошибка 1
make[1]: *** [all-recursive] Ошибка 1
make: *** [all] Ошибка 2

Версию Extundelete 0.2.2 скачивал с официального сайта, логично предположить, что ошибок в коде нет. Получается, что у меня старая версия компилятора или еще что? Буду очень признателен, если разъясните.

Сразу вопрос - зачем оно тебе из исходников? Что у тебя за дистрибутив? Есть ли в репах оно?

Zhbert ★★★★★ ()

в репозиториях скорее всего есть

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

Из исходников, потому что у меня тема курсового похожая. Решил переделать немного и выдать за свое, ибо нормальной документации на русском по этой теме не нашел, а с английским не то, что плоховато, но читать свободно кучу документации не могу.

Дистрибутив Ubuntu 12.10. Обычная установка не вариант, т.к. См. Выше.

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

Решил переделать немного и выдать за свое

Ссылку на GPL и оригинал оставить не забудь, а то это нарушение лицензии будет.

Оформи выхлоп в LORCODE, чтоб он читабелен был.

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

Судя по ошибкам, если кто-то это умудрился собрать, то запускать его равносильно запуску «патча Бармина»...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Zhbert

Ссылку на GPL и оригинал оставить не забудь

По идее, достаточно оригинальные шапки файлов пооставлять + добавить себя.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Zhbert

а то это нарушение лицензии будет.

Декан лично займется вопросом =)

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

Это то, что пишется в процессе конфигурирования:

eugenes@welcometohell:~/temp/extundelete-0.2.2$ ./configure
Configuring extundelete 0.2.2
Writing generated files to disk

Где еще смотреть лог?

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

Хочется увидеть выхлоп типа такого:

$ ./configure
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking for working aclocal... found
checking for working autoconf... found
checking for working automake... found
checking for working autoheader... found
checking for working makeinfo... found
checking for gcc... gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking how to run the C preprocessor... gcc -E
checking for flex... flex
checking for flex... (cached) flex
checking for yywrap in -lfl... yes
checking lex output file root... lex.yy
checking whether yytext is a pointer... yes
checking for bison... bison -y
updating cache ./config.cache
creating ./config.status
creating Makefile

Не помню как называется лог-файл. Как вариант: можно взять чистые исходники и заново выполнить configure.

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

В файле config.log вроде это должно быть. Файл большой и в сообщения не помещается, поэтому скинул на гугл докс https://docs.google.com/document/d/1AcTKN7C6r2FJ2stsZ-hTG_ELsRrnvxEI4t_kZoyfv....

Пытаюсь откомпилировать в Geany приложение, вот что он мне пишет:

g++ -Wall -o "cli" "cli.cc" (в каталоге: /home/eugenes/temp/11/extundelete-0.2.2/src)
cli.cc: В функции «int decode_options(int&, char**&)»:
cli.cc:365:16: предупреждение: неиспользуемая переменная «longopts» [-Wunused-variable]
/tmp/ccSlIWZB.o: In function `examine_fs(struct_ext2_filsys*)':
cli.cc:(.text+0x51): undefined reference to `operator<<(std::ostream&, ext2_super_block const*)'
cli.cc:(.text+0x98): undefined reference to `ext2fs_read_inode_bitmap'
cli.cc:(.text+0xae): undefined reference to `ext2fs_read_block_bitmap'
cli.cc:(.text+0x3a3): undefined reference to `print_inode(struct_ext2_filsys*, unsigned int)'
cli.cc:(.text+0x3d9): undefined reference to `classify_block(struct_ext2_filsys*, unsigned int)'
cli.cc:(.text+0x418): undefined reference to `get_journal_fs(struct_ext2_filsys*, struct_ext2_filsys**, std::string)'
cli.cc:(.text+0x490): undefined reference to `read_journal_superblock(struct_ext2_filsys*, struct_ext2_filsys*, journal_superblock_s*)'
cli.cc:(.text+0x4f5): undefined reference to `operator<<(std::ostream&, journal_superblock_s const&)'
cli.cc:(.text+0x643): undefined reference to `init_journal(struct_ext2_filsys*, struct_ext2_filsys*, journal_superblock_s*)'
cli.cc:(.text+0x677): undefined reference to `extundelete_make_outputdir(char const*, char const*)'
cli.cc:(.text+0x6ee): undefined reference to `restore_directory(struct_ext2_filsys*, struct_ext2_filsys*, unsigned int, std::string)'
cli.cc:(.text+0x77b): undefined reference to `restore_file(struct_ext2_filsys*, struct_ext2_filsys*, std::string const&)'
cli.cc:(.text+0x7d1): undefined reference to `restore_file(struct_ext2_filsys*, struct_ext2_filsys*, std::string const&)'
cli.cc:(.text+0x8c2): undefined reference to `restore_file(struct_ext2_filsys*, struct_ext2_filsys*, std::string const&)'
cli.cc:(.text+0x9e6): undefined reference to `restore_inode(struct_ext2_filsys*, struct_ext2_filsys*, unsigned int, std::string const&)'
cli.cc:(.text+0xa8c): undefined reference to `ext2fs_close'
/tmp/ccSlIWZB.o: In function `decode_options(int&, char**&)':
cli.cc:(.text+0xc93): undefined reference to `print_usage(std::ostream&, std::string)'
cli.cc:(.text+0xcb1): undefined reference to `print_version()'
cli.cc:(.text+0x1373): undefined reference to `print_version()'
cli.cc:(.text+0x169e): undefined reference to `print_usage(std::ostream&, std::string)'
/tmp/ccSlIWZB.o: In function `init_fs(char const*, struct_ext2_filsys**)':
cli.cc:(.text+0x17f0): undefined reference to `unix_io_manager'
cli.cc:(.text+0x1a09): undefined reference to `ext2fs_open'
/tmp/ccSlIWZB.o: In function `main':
cli.cc:(.text+0x1b45): undefined reference to `load_super_block(struct_ext2_filsys*)'
cli.cc:(.text+0x1c78): undefined reference to `ext2fs_close'
Сборка завершилась с ошибкой.
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

Ну в чем дело может быть? Исходники должны быть рабочие, ну по крайней мере компилятор не должен выдавать ошибок. Или мы пользуемся разными c++?

gwyllum ()

Секцию «How to compile and install extundelete» на оффсайте прочитал и выполнил то, что там написано?

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

Похоже, что конфигурилка не очень качественно сделана (еще не доделана). В подобных больших проектах очень сложно создать корректную проверку всех возможных компонент и их версии. Девелоперы у себя чаще всего используют какие-то конкретные версии для разработки.

Как вариант: обратись к разработчикам и попроси перечень версий необходимого ПО.

observer ★★★ ()
Последнее исправление: observer (всего исправлений: 2)

Ни хрена не понял!

Скачал отсюда (там git, а как заставить git отдать файлы по http[s], я не знаю — простая замена git:// на http[s]:// ни к чему не привела).

Распаковал. configure оказался не 755, сделал

chmod 755 configure 

./configure
Configuring extundelete 0.2.3
Writing generated files to disk

make
make -s all-recursive
Making all in src
extundelete.cc: В функции <<errcode_t restore_inode(ext2_filsys, ext2_filsys, ext2_ino_t, const string&)>>:
extundelete.cc:1744:30: предупреждение: сравнение знакового и беззнакового целых выражений [-Wsign-compare]

В директории src появился бинарник extundelete. Все.

Eddy_Em ☆☆☆☆☆ ()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Нормальный CMakeLists.txt составить не так уж и сложно!

И проконтролировать возможные проблемы со всеми комбинациями версий?

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

С более новыми, по идее, проблем быть не должно.

У меня — арчик. Обновлял дней 10 назад. Все работает.

А может в версии 2.2 были косяки? Сейчас проверю.


ТС, я уж не знаю, что ты там наворотил, но 2.2 тоже компилится с одним предупреждением.

Eddy_Em ☆☆☆☆☆ ()
Последнее исправление: Eddy_Em (всего исправлений: 2)

ТС, можешь на крайняк (если надо срочно) за 15 минут поставить себе в виртуалку тот же дебиан и в нем работать.

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

Похоже, в бубунте файлы /usr/include/ext2fs/*.h лежат не в e2fsprogs, а каком-нибудь e2fsprogs-devel.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

ТС, я уж не знаю, что ты там наворотил, но 2.2 тоже компилится с одним предупреждением.

В убунте был такой момент, что для сборки чего либо из сырцов надо поставить build-essential, иначе оно сыплет ошибками во всем стороны.

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

Судя по матюгам, компилятор не находит заголовочных файлов e2fsprogs. Возможно, еще кучи чего.

Да уж. Бубунта…

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Ну так тогда надо какие-то девел пакеты доставить, по идее. Поискать по репе пакет dev для этой их e2fsprogs.

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

Гугол говорит, что бубунте нужен e2fslibs-dev

Дебиану тоже. Конфигурилка плевалась ошибкой без него. Все ок.

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