> man operating_systems
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
Vadim Ushakov
Суббота 14.01.2006 17:56

ID пользователя #409
Зарегистрирован: Четверг 18.08.2005 04:25
Местонахождение: Красноярск
Сообщений: 85
Извиняюсь за идиотский вопрос, но сейчас столкнулся со странным то ли глюком, то ли фичей, то ли фиг знает чем. Есть простеший исходник для flex-а:
%%
\n printf("!");
. printf("?");

%%
Компилирую его таким скриптом:
NAMES = tmp.grammar
OBJ = $(addsuffix .o,$(NAMES))
lexer: $(OBJ) ; gcc -lfl $^ -o $@
tmp.grammar.c: grammar.flex ; flex -o$@ < $<
%.o: %.c ; gcc -c $< -o $@

Получаю вот это:
tmp.grammar.o(.text+0x329): In function `yylex':
: undefined reference to `yywrap'
tmp.grammar.o(.text+0xa87): In function `input':
: undefined reference to `yywrap'
Дивлюсь, что за глюк, отыскиваю /usr/lib/libfl.a, удостоверяюсь, что в ней есть имя yywrap и дивлюсь еще больше. Потом достаю из libfl.a файлик libyywrap.o, ложу его в папку проекта, добавляю в makefile строку NAMES = tmp.grammar libyywrap. И всё заработало!!
Может быть я чего-то сильно не понимаю в жизни и в принципах функционирования ld, но как такое возможно? Почему он не берет libyywrap.o из библиотеки? (При этом, находящийся в той же библиотеке файл libmain.o - берет.) Кто-нибудь знает, чем это вызвано?

<span class='smallblacktext'>[ Редактирование ]</span>

Падает тот, кто бежит; тот, кто лежит – уже не падает.
Наверх
 

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.