iAlexander |
Отправлено: 15.12.2006, 20:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
Привет всем,
помогите победить 5-й Билдер. Никак не могу собрать проект, использующий сгенерированный flex'ом сишный исходник.
Эта зараза bcb вываливает
[Linker error] Unresolved external 'isatty(int)' referenced from sql-like-lexic.obj
В файле sql-like-lexic.cpp, который сгенерирован Flex'ом:
flex -Psql -osql-like-lexic.cpp sql-like-lexic.l
есть вызов isatty(), который билдером компилируется в объектнике sql-like-lexic.obj как
CODE | @isatty
isatty
isatty
|
(упомянул все вхождения этой строки в объектнике)
Если же вставить вызов того же isatty() в тестовый sql_lex_test_isatty.cpp,
CODE | //---------------------------------------------------------------------------
#include <vcl.h>
#include <io.h>
#pragma hdrstop
//---------------------------------------------------------------------------
extern int sqllex();
#pragma argsused
int main(int argc, char* argv[])
{
isatty(9);
sqllex();
return 0;
}
//---------------------------------------------------------------------------
|
то объектник sql_lex_test_isatty.obj будет содержать
CODE | _isatty
isatty
isatty
|
На эту версию вызова Билдер не ругается.
(Если сделать обычный VCL application с формами, тоже нет проблем с вызовом isatty())
Что нужно сделать, чтобы билдер понимал свой объектник?
P.S. В VC6 те же исходники компилировались нормально,
flex взят из поставки CYGWIN_NT-5.1
Отредактировано iAlexander — 15.12.2006, 21:15 |
|
exp |
Отправлено: 15.12.2006, 20:36 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
попробуй
extern "C" int sqllex();
|
|
iAlexander |
Отправлено: 15.12.2006, 20:47 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
exp,
Тут проблема не в самой sqllex() [yylex()].
Генерируемый c-файл [sql-like-lexic.cpp] компилируется не так, как обычный, написанный от руки [sql_lex_test_isatty.cpp]. Причем разница видимо в том, как манглятся имена стандаотных функций.
Я, впрочем, попробовал объявить в sql_lex_test_isatty.cpp ф-ю sqllex() как extern "C", это не помогло. |
|
Romikgy |
Отправлено: 15.12.2006, 21:02 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
А где ты подключаешь свой obj проекту билдера?
и че исходник нельзя напрямую в билдер всунуть? |
|
iAlexander |
Отправлено: 15.12.2006, 21:13 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
obj компилится самим Билдером. Именно поэтому так неприятно, что он не линкует свой же код.
Битый час искал по менюшкам где можно какие-нить опции компилятора/линковщика поставить — ничего не нашел.
А исходный cpp текст, сгенеренный flex'ом, я указываю как один из исходных файлов проекта в Билдере (тип проекта кстати — console).
Всего файла два — второй содержит ф-ю main, приведен выше в начале топика.
Отредактировано iAlexander — 15.12.2006, 21:14 |
|
Romikgy |
Отправлено: 15.12.2006, 23:02 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
я не знаю что есть flex , но для нормальной работы имхо нежен хедерный файл |
|
Romikgy |
Отправлено: 15.12.2006, 23:04 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 72
|
Кса прикрепи проект посмотрим что намудрено |
|