Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компиляция самодостаточной функции в obj(lib) файл 
:(
    Опции темы
Slash_from_Rjazan
Дата 11.5.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



Вобщем задача такая.
Есть функции:
Код

int _pascal save_to_file(int fileNo, float *a, float *b){
 char FileName[255];
 FILE *stream;
 sprintf(FileName,"%s%i",BASENAME,fileNo);
 stream=fopen(FileName,"wt+");
 fprintf (stream,"%f %f",*a,*b);
 fclose(stream);
 return 1;
};

int _pascal read_from_file(int fileNo,float *a, float *b){
 char FileName[255];
 FILE *stream;
 sprintf(FileName,"%s%i",BASENAME,fileNo);
 stream=fopen(FileName,"rt+");
 fscanf (stream,"%f %f",a,b);
 fclose(stream);
 return 1;
};

Необходимо из них получить obj(lib) файл так, что прилинковав его к произвольному проекту этими функциями можно было лекго пользоваться без использовния дополнительных библиотек...
Сейчас программа, использующая эти функции из obj файла ,полученного обычным способом, вываливается с сообщением:
"floating point formats not linked
Abnormal program termination"
PM MAIL   Вверх
nerezus
Дата 11.5.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

_pascal
 Что эт за хрень? убираем, компилер ругается.

И дай пример вызова.
P.S. У меня просто вываливается "программа выполнила недопустимую операцию, но я вроде не так ее вызывал"


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
EnergoHokum
Дата 11.5.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Не _pascal, а __pascal, это аналог __stdcall, если не путаю.

Добавлено через 9 минут и 16 секунд
И если уж работаешь на плюсах, может лучше использовать <iostream>? Зайди на http://www.cplusplus.com/reference/iostream/ , там много интересного.
PM MAIL ICQ   Вверх
Slash_from_Rjazan
Дата 11.5.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



У меня Borland C++ 3.1.
Директива _pascal определяет порядок формирования имени функции и передачи в нее параметров -- при простой компиляции ее наличие или отсутсвие никак не сказывается.

Пример вызова дать не могу ибо вызываю это дело при создании проекта в среде UltraLogik, предназначенной для создания ПО для контроллеров. На контроллере на платфоме x86 работает под DOS.

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

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  Kontr.exe_bak 16,45 Kb
PM MAIL   Вверх
EnergoHokum
Дата 11.5.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Такое ощущение, что у тебя не прилинкована библиотека работы с float, ругань на "floating point formats not linked" и "Null pointer assignment Divide error" вкомпилирована прямо в файл.
PM MAIL ICQ   Вверх
Slash_from_Rjazan
Дата 11.5.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



Хм, сообщение об ошибке я и сам перевел...
Вопрос именно в том как это все туда влинковать!!!
PM MAIL   Вверх
EnergoHokum
Дата 11.5.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



То есть, ты пытаешься компилировать *.cpp именно в таком виде, как привёл в первом посте? Без #include <нужный_заголовочный_файл.h>?
PM MAIL ICQ   Вверх
Slash_from_Rjazan
Дата 11.5.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



Я пытаюсь компилировать следующий исходник:
Код

#include <STDLIB.H>
#include <STDIO.H>
#define BASENAME "D:\\"
int _pascal save_to_file(int fileNo, float *a, float *b){
 char FileName[255];
 FILE *stream;
 sprintf(FileName,"%s%i",BASENAME,fileNo);
 stream=fopen(FileName,"wt+");
 fprintf (stream,"%f %f",*a,*b);
 fclose(stream);
 return 1;
};

int _pascal read_from_file(int fileNo,float *a, float *b){
 char FileName[255];
 FILE *stream;
 sprintf(FileName,"%s%i",BASENAME,fileNo);
 stream=fopen(FileName,"rt+");
 fscanf (stream,"%f %f",a,b);
 fclose(stream);
 return 1;
};


Это сообщение отредактировал(а) Slash_from_Rjazan - 11.5.2007, 14:31
PM MAIL   Вверх
EnergoHokum
Дата 11.5.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Фффух!!! Утомил ты меня, однако! Под конец раб. недели моск плохо работает. Собрал я это под GCC, если что, я до понедельника в инете не буду, но получилось так:
_pascal я заменил на __stdcall, бо GCC _pascal не ест, и в файле, из которого делать exe-шник перед main() добавил упреждающее объявление функций:
Код

#include <iostream>

int __stdcall save_to_file(int fileNo,float* a,float* b);
int __stdcall read_from_file(int fileNo,float* a,float* b);

int main(int argc,char** argv)
{
    std::cout<<"Run"<<std::endl;
    float f1=3.14159,f2=9.0000012345;
    save_to_file(1000,&f1,&f2);
    return 0;
}

Всё заработало, файл создался, что нужно - записалось туда. Ну всё, до понедельника. ИК!!!

Добавлено через 1 минуту и 23 секунды
На всякий случай, держи Makefile:
Код

REMOVE = rm -f
INEXECUTE = main
OUTEXECUTE = prog
INLIB = file
OUTLIB = libTest

$(OUTEXECUTE) : $(INEXECUTE).o
    g++ -o $(OUTEXECUTE) $(INEXECUTE).o -L "e:/Hokum/Program/CPP/testVingrad" -lTest
$(INEXECUTE).o : $(INEXECUTE).cpp
    g++ -c $(INEXECUTE).cpp
$(OUTLIB) : $(INLIB).o
    ar crf $(OUTLIB).a $(INLIB).o
    ranlib $(OUTLIB).a
$(INLIB).o : $(INLIB).cpp
    g++ -c $(INLIB).cpp

exe :
    $(MAKE) $(OUTEXECUTE)
lib :
    $(MAKE) $(OUTLIB)
clean :
    $(REMOVE) $(OUTLIB).lib
    $(REMOVE) $(INLIB).o
ALL : clean lib exe

PM MAIL ICQ   Вверх
Любитель
Дата 11.5.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Slash_from_Rjazan @  11.5.2007,  12:18 Найти цитируемый пост)
У меня Borland C++ 3.1.

Цитата(Slash_from_Rjazan @  11.5.2007,  13:21 Найти цитируемый пост)
Вопрос именно в том как это все туда влинковать!!!

Какие-то ключи компилера должны быть. Смотри его доки. Или приведи нам - разберёмся.

ЗЫ У меня такого компилера нет и вживую его никогда не видел smile


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 11.5.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Любитель @  11.5.2007,  19:03 Найти цитируемый пост)
ЗЫ У меня такого компилера нет и вживую его никогда не видел smile 


У-у, ты много потерял smile Могу выложить это антикварное чудо или в личку переслать. Поржать. У нас этого добра в универе навалом.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Slash_from_Rjazan
Дата 11.5.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



Компилятор может и староват...
Говорите ключи искать, а хоть в каком направлении? Как требуемая мне возможность называться может?

Кстати, может быть вы сразу посоветуете мне какой-либо другой способ решит мою задачу? Т.е. использовать другой язык, может быть системные вызовы ДОС? Важно только, чтобы можно было получить obj файл с функциями...
PM MAIL   Вверх
Любитель
Дата 11.5.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Slash_from_Rjazan, как ты вообще всё собираешь?

1. Файл с функциями как компилешь?
2. Файл, юзающей их - тот же вопрос.
3. Как всё сие линкеришь?


--------------------
PM MAIL ICQ Skype   Вверх
Slash_from_Rjazan
Дата 12.5.2007, 16:14 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 11.5.2007

Репутация: нет
Всего: нет



1. Файл с функциями как компилешь?
Выставляю нужные мне параметры модели памяти (Medium), далее меню Compile->Make. В папке с проектом получаю obj-файл
2. Файл, юзающей их - тот же вопрос.
Этот файл компилируется средой UltraLogik, на выходе тоже получается obj файл
3. Как всё сие линкеришь?
С помощью tlnik:
tlink c0m.obj+Save.obj+kontr.obj,kontr,,cm.lib

У меня уже есть подозрение, что нужно подключить при линковке еще какую-либо библиотеку или модуль, надо только узнать какую...

Это сообщение отредактировал(а) Slash_from_Rjazan - 12.5.2007, 16:24
PM MAIL   Вверх
Любитель
Дата 12.5.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Slash_from_Rjazan, во-первых, точно сказать ничего не могу. Во-вторых, если я правильно понял - один файл компилтся с одной среды, другой - с другой? Очень вероятно, что они по-разному играются с ключами компилера. Лучше всё компилить из одного источника.

И ещё - приведи вызывающей код. На всякий случай. Не пойму, причём тут вещественная арифметика...


--------------------
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.