C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
_isatty vs @isatty / Linking in Builder 5 /, [Linker error] Unresolved external 'isat
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



Кса прикрепи проект посмотрим что намудрено

Вернуться в Вопросы программирования в C++Builder