A A A A Автор Тема: Астрономия на персональном компьютере. Исходники.  (Прочитано 15163 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн gashaАвтор темы

  • ****
  • Сообщений: 319
  • Благодарностей: 12
  • 61:45:28,6 N 34:21:39.5 E (134 + 15 этаж) м
    • Сообщения от gasha
    • Siä Karjalassa
Добрый день. Решил скомпилировать программы из исходников, которые прилагаются на CD к книге.

ОС: openSUSE 12.3

Не получается. В самой книге авторы создали ряд костылей, так как на то время компилятор g++ не мог ряд вещей. Смотри страницы 289 и 290 книги.
В двух словах: отсутствие поддержи манипуляторов iostream  в стандартной библиотеке, а также отсутствия реализации модуля <limits>.
В качестве решения первой проблемы был использован файл:

//------------------------------------------------------------------------------
//
// GNU_iomanip.h
//
// Purpose:   
//
//    Temporaray implementation of ostream manipulators from the
//    C++ Standard Library, which are not contained in <iomanip>
//    as provided with GNU C++.
//
// Notes:
//
//   This software is protected by national and international copyright.
//   Any unauthorized use, reproduction or modificaton is unlawful and
//   will be prosecuted. Commercial and non-private application of the
//   software in any form is strictly prohibited unless otherwise granted
//   by the authors.
//   
// (c) 1999 Oliver Montenbruck, Thomas Pfleger
//
//------------------------------------------------------------------------------

#include <iomanip>
#include <iostream>

namespace{
ostream& left (ostream& os){os.setf(ios::left ,ios::adjustfield); return os;};
ostream& right(ostream& os){os.setf(ios::right,ios::adjustfield); return os;};
ostream& fixed(ostream& os){os.setf(ios::fixed,ios::floatfield);  return os;};
ostream& showpos  (ostream& os){os.setf(ios::showpos); return os;};
ostream& noshowpos(ostream& os){os.unsetf(ios::showpos); return os;};
}

а второй:

#ifdef __GNUC__   // GNU C++ adaptation
#include <float.h>
#else             // Standard C++ version
#include <limits>
#endif

  #ifdef __GNUC__   // GNU C++ adaptation
  const double eps_mach = DBL_EPSILON;
  #else             // Standard C++ version
  const double eps_mach = numeric_limits<double>::epsilon();
  #endif

Пробуем скомпилировать сатическую библиотеку APC_Lib. Берём исходники из архива APCe/Linux/apcesrc.tar

gasha@almukantarat:~/Portable/APCe/Linux/apcesrc> g++ -c APC*
APC_IO.cpp: In function ‘void GetFilenames(int, char**, char*, char*, bool&, char*, bool&)’:
APC_IO.cpp:93:40: error: ‘memset’ was not declared in this scope
APC_IO.cpp:100:52: error: ‘strncpy’ was not declared in this scope
APC_IO.cpp:111:57: error: ‘strncpy’ was not declared in this scope
APC_Kepler.cpp: In function ‘Mat3D GaussVec(double, double, double)’:
APC_Kepler.cpp:466:20: error: ‘R_z’ was not declared in this scope
APC_Kepler.cpp:466:30: error: ‘R_x’ was not declared in this scope
In file included from APC_Math.cpp:28:0:
GNU_iomanip.h:27:1: error: ‘ostream’ does not name a type
GNU_iomanip.h:28:1: error: ‘ostream’ does not name a type
GNU_iomanip.h:29:1: error: ‘ostream’ does not name a type
GNU_iomanip.h:30:1: error: ‘ostream’ does not name a type
GNU_iomanip.h:31:1: error: ‘ostream’ does not name a type
APC_Math.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Angle&)’:
APC_Math.cpp:429:16: error: invalid conversion from ‘long int’ to ‘std::ios_base::fmtflags {aka std::_Ios_Fmtflags}’ [-fpermissive]
In file included from /usr/include/c++/4.7/iomanip:42:0,
                 from APC_Math.cpp:22:
/usr/include/c++/4.7/bits/ios_base.h:580:5: error:   initializing argument 1 of ‘std::ios_base::fmtflags std::ios_base::setf(std::ios_base::fmtflags)’ [-fpermissive]
APC_Math.cpp: In member function ‘void SolverLSQ::Solve(double*)’:
APC_Math.cpp:547:13: error: ‘exit’ was not declared in this scope
APC_Moon.cpp: In function ‘void MiniMoon(double, double&, double&)’:
APC_Moon.cpp:481:20: error: ‘R_x’ was not declared in this scope
APC_Phys.cpp: In function ‘void Orient(PlanetType, SystemType, double, Mat3D&, RotationType&)’:
APC_Phys.cpp:193:12: error: ‘R_z’ was not declared in this scope
APC_Phys.cpp:193:30: error: ‘R_x’ was not declared in this scope
APC_PrecNut.cpp: In function ‘Mat3D PrecMatrix_Ecl(double, double)’:
APC_PrecNut.cpp:63:23: error: ‘R_z’ was not declared in this scope
APC_PrecNut.cpp:63:33: error: ‘R_x’ was not declared in this scope
APC_PrecNut.cpp: In function ‘Mat3D PrecMatrix_Equ(double, double)’:
APC_PrecNut.cpp:101:16: error: ‘R_z’ was not declared in this scope
APC_PrecNut.cpp:101:29: error: ‘R_y’ was not declared in this scope
APC_PrecNut.cpp: In function ‘Mat3D NutMatrix(double)’:
APC_PrecNut.cpp:139:24: error: ‘R_x’ was not declared in this scope
APC_PrecNut.cpp:139:35: error: ‘R_z’ was not declared in this scope
APC_Spheric.cpp: In function ‘Mat3D Equ2EclMatrix(double)’:
APC_Spheric.cpp:45:17: error: ‘R_x’ was not declared in this scope
APC_Spheric.cpp: In function ‘void Equ2Hor(double, double, double, double&, double&)’:
APC_Spheric.cpp:94:25: error: ‘R_y’ was not declared in this scope
APC_Spheric.cpp: In function ‘void Hor2Equ(double, double, double, double&, double&)’:
APC_Spheric.cpp:130:28: error: ‘R_y’ was not declared in this scope                                                                                                                                                                                                           
APC_Sun.cpp: In function ‘void MiniSun(double, double&, double&)’:                                                                                                                                                                                                             
APC_Sun.cpp:336:19: error: ‘R_x’ was not declared in this scope                                                                                                                                                                                                               
In file included from APC_Time.cpp:29:0:                                                                                                                                                                                                                                       
GNU_iomanip.h:27:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
GNU_iomanip.h:28:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
GNU_iomanip.h:29:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
GNU_iomanip.h:30:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
GNU_iomanip.h:31:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
In file included from APC_VecMat3D.cpp:28:0:                                                                                                                                                                                                                                   
GNU_iomanip.h:27:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
GNU_iomanip.h:28:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
GNU_iomanip.h:29:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
GNU_iomanip.h:30:1: error: ‘ostream’ does not name a type                                                                                                                                                                                                                     
GNU_iomanip.h:31:1: error: ‘ostream’ does not name a type

Моих ничтожных познаний в с++ недостаточно, чтобы распарсить проблему. Вижу, что проблема в той самой адаптации. Она делалась для компилятора GNU C++ 2.91, а я сейчас использую:

gasha@almukantarat:~/Portable/APCe/Linux/apcesrc> g++ --version
g++ (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012]

Как быть? Авторы книги немцы, они сами тестировали исходники на SUSE 6.2
Спасибо.
« Последнее редактирование: 26 Мар 2013 [15:04:49] от gasha »
БПЦ 15х50, Nikon Aculon 7x50, Celestron Advanced VX 8" N, Sky-Watcher BK 909AZ3, ТАЛ-65, Таир-3ФС, Canon EOS 60D, Sony Alpha NEX-3.

Оффлайн Deimos

  • Модератор
  • *****
  • Сообщений: 17 406
  • Благодарностей: 309
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от Deimos
    • Белорусская любительская астрономическая сеть
Стандарт С++ - не нечто железобетонное, он имеет несколько редакций.
Приложите пожалуйста полный файл, который пытаетесь компилировать, так будет проще.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн gashaАвтор темы

  • ****
  • Сообщений: 319
  • Благодарностей: 12
  • 61:45:28,6 N 34:21:39.5 E (134 + 15 этаж) м
    • Сообщения от gasha
    • Siä Karjalassa
Стандарт С++ - не нечто железобетонное, он имеет несколько редакций.
Приложите пожалуйста полный файл, который пытаетесь компилировать, так будет проще.

Исходники


БПЦ 15х50, Nikon Aculon 7x50, Celestron Advanced VX 8" N, Sky-Watcher BK 909AZ3, ТАЛ-65, Таир-3ФС, Canon EOS 60D, Sony Alpha NEX-3.


Оффлайн gashaАвтор темы

  • ****
  • Сообщений: 319
  • Благодарностей: 12
  • 61:45:28,6 N 34:21:39.5 E (134 + 15 этаж) м
    • Сообщения от gasha
    • Siä Karjalassa
Добавлял:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Добавлял:

#include <cstring>
#include <cstdio>
#include <memory>

Добавлял и удалял / не удалял:

#ifdef __GNUC__   // GNU C++ adaptation
#include <memory>       
#endif

Всё вместе добавлял)) и всё также.
В файл APC_IO.cpp, и никакой разницы. Одинаковые ошибки
« Последнее редактирование: 19 Мар 2013 [23:43:20] от gasha »
БПЦ 15х50, Nikon Aculon 7x50, Celestron Advanced VX 8" N, Sky-Watcher BK 909AZ3, ТАЛ-65, Таир-3ФС, Canon EOS 60D, Sony Alpha NEX-3.

Оффлайн huch

  • *****
  • Сообщений: 653
  • Благодарностей: 14
    • Сообщения от huch
Добрый день. Решил скомпилировать программы из исходников, которые прилагаются на CD к книге.
Там все еще веселее.
Отлавливать баги там надо не только в библиотеках и в синтаксисе, но и в алгоритмах. Я как-то попробовал посчитать модифицированную юлианскую дату - результат был неожиданным. Пересчет экваториальных координат в горизонтальные нормально работает только если азимут попадает в диапазон 0-90 градусов.

Оффлайн fmman

  • **
  • Сообщений: 82
  • Благодарностей: 8
    • Сообщения от fmman
Там все еще веселее. Отлавливать баги там надо не только в библиотеках и в синтаксисе, но и в алгоритмах. Я как-то попробовал посчитать модифицированную юлианскую дату - результат был неожиданным. Пересчет экваториальных координат в горизонтальные нормально работает только если азимут попадает в диапазон 0-90 градусов.
4-е издание этой книги с исходниками на С++ опубликовано в 1999г., а написана она была, очевидно, раньше. Стандарт С++ вышел в 1998г., т.е. во время написания (не опубликования!) книги. В С++98 как раз и зафиксированы названия и содержания хедеров С++ (и остаются действующими и поныне даже для С++11). Кстати, похоже STL нигде не используется - библиотека как раз стала частью плюсов со стандартом C++98. Перевод книги в России вышел в 2002г., а редакторам и переводчикам, очевидно, было влом приводить исходники к стандарту.
В предыдущих изданиях исходники вообще написаны на Паскале, наверное, при кросс-трансляции внесли ошибки в алгоритмы.

Оффлайн fmman

  • **
  • Сообщений: 82
  • Благодарностей: 8
    • Сообщения от fmman
Поправить ошибки синтаксиса довольно легко.
Вот попробовал на примере coco.cpp:

1. Вышвыриваем из GNU_iomanip.h:
namespace{
ostream& left (ostream& os){os.setf(ios::left ,ios::adjustfield); return os;};
ostream& right(ostream& os){os.setf(ios::right,ios::adjustfield); return os;};
ostream& fixed(ostream& os){os.setf(ios::fixed,ios::floatfield);  return os;};
ostream& showpos  (ostream& os){os.setf(ios::showpos); return os;};
ostream& noshowpos(ostream& os){os.unsetf(ios::showpos); return os;};
}

2. Вышвыриваем отовсюду, где попадётся:
#ifdef __GNUC__  // GNU C++ adaptation
#include "GNU_iomanip.h"
#endif

3. Строим. Беда - авторы забыли прототипы функций написать:
...error: ‘R_z’ was not declared in this scope
и т.п.

Дописываем в конец APC_VecMat3D.h:
// fmman добавил прототипы!
Mat3D R_z(double RotAngle);
Mat3D R_x(double RotAngle);
Mat3D R_y(double RotAngle);

4. Тестим. Полёт нормальный. 8)
см. PrtSc.

5. Аналогично правим все другие приложения (если есть цель, время и желание).

ЗЫ. Использовал Mint14 и Code::Blocks 10.05 c gcc 4.7.0. Разумеется всё пойдёт и под Qt, и под MS VS независимо от Linux/Windows. Свежак Code::Blocks под Сузю:
http://www.codeblocks.org/downloads/26


Оффлайн gashaАвтор темы

  • ****
  • Сообщений: 319
  • Благодарностей: 12
  • 61:45:28,6 N 34:21:39.5 E (134 + 15 этаж) м
    • Сообщения от gasha
    • Siä Karjalassa
1. Удалил файл GNU_iomanip.h
2. Удалил из всех файлов следующую запись (где она встречается):

#ifdef __GNUC__  // GNU C++ adaptation
#include "GNU_iomanip.h"
#endif

3. Удалил из файла APC_IO.cpp:

#ifdef __GNUC__   // GNU C++ adaptation
#include <memory>       
#endif

и добавил:

#include <stdlib.h>

4. Добавил в файл APC_Math.cpp:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Вот лог компиляции библиотеки:

gasha@almukantarat:~/Portable/APCe/Linux/apcesrc> g++ -c APC*
APC_Math.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Angle&)’:
APC_Math.cpp:429:16: error: invalid conversion from ‘long int’ to ‘std::ios_base::fmtflags {aka std::_Ios_Fmtflags}’ [-fpermissive]
In file included from /usr/include/c++/4.7/iomanip:42:0,
                 from APC_Math.cpp:22:
/usr/include/c++/4.7/bits/ios_base.h:580:5: error:   initializing argument 1 of ‘std::ios_base::fmtflags std::ios_base::setf(std::ios_base::fmtflags)’ [-fpermissive]
gasha@almukantarat:~/Portable/APCe/Linux/apcesrc>

Какие ещё есть идеи? Спасибо.
« Последнее редактирование: 23 Мар 2013 [12:23:37] от gasha »
БПЦ 15х50, Nikon Aculon 7x50, Celestron Advanced VX 8" N, Sky-Watcher BK 909AZ3, ТАЛ-65, Таир-3ФС, Canon EOS 60D, Sony Alpha NEX-3.

Оффлайн Afarus

  • *****
  • Сообщений: 1 716
  • Благодарностей: 55
  • Просто - Живу!
    • Сообщения от Afarus
У есть есть вся книга на турбопаскале. набрал и пользовался в эпоху информационного вакуума. Откомпилировано. исправлены некоторые ошибки в исходниках.
Правда - меч с тремя лезвиями: Твоя сторона, Моя сторона и ИСТИНА.

Оффлайн fmman

  • **
  • Сообщений: 82
  • Благодарностей: 8
    • Сообщения от fmman
2 gasha
1. Удалить нужно не файл, а объявление анонимного пространства имён в этом файле, которое накрывает std. Хотя, впрочем, там больше ничего и нет.
2. Зер гуд.
3. Нет необходимости.
4. Ничего этого не надо. К тому же в плюсах принято писать имена как <cstdlib>, <cstring>, <ctime>, <cmath> и т.п.
<stdio.h> вообще для C, в C++ есть <iostream> для вывода/ввода.
По существу ошибки. В век C++11, C#, F# как-то странно выглядит устаревшая идея перегружать операции в системной библиотеке извне с помощью дружественных функций. Нужно:
добавить статическое приведение типа в строке 429 в APC_Math.cpp - сброс флагов в исходное состояние после выполнения перегруженной операции << для класса os, метод setf().;)
« Последнее редактирование: 24 Мар 2013 [01:16:06] от fmman »

Оффлайн gashaАвтор темы

  • ****
  • Сообщений: 319
  • Благодарностей: 12
  • 61:45:28,6 N 34:21:39.5 E (134 + 15 этаж) м
    • Сообщения от gasha
    • Siä Karjalassa
fmman, я очень слаб в с++, а вернее полный 0.

Сейчас у меня так:

1. Удалён GNU_iomanip.h

2. Убраны все записи:

#ifdef __GNUC__  // GNU C++ adaptation
#include "GNU_iomanip.h"
#endif

3. В файл APC_IO.cpp добавлены:

#include <cstdio>
#include <cstdlib>
#include <cstring>

вместо:

#ifdef __GNUC__   // GNU C++ adaptation
#include <memory>       
#endif

4. В файле APC_Math.cpp добавлена:

#include <cstdlib>

и ниже вместо:

os.setf(flags); // restore output stream format flags

(в оригинале 429 строка) прописано:

os << setf(); // restore output stream format flags

При таком варианте компиляция идёт с большим успехом)):

gasha@almukantarat:~/Portable/APCe/Linux/apcesrc> g++ -c APC*
APC_Math.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Angle&)’:
APC_Math.cpp:426:16: error: ‘setf’ was not declared in this scope
gasha@almukantarat:~/Portable/APCe/Linux/apcesrc>

Чуть-чуть осталось)) Но знаний не хватает(( Большое вас спасибо)


БПЦ 15х50, Nikon Aculon 7x50, Celestron Advanced VX 8" N, Sky-Watcher BK 909AZ3, ТАЛ-65, Таир-3ФС, Canon EOS 60D, Sony Alpha NEX-3.

Оффлайн fmman

  • **
  • Сообщений: 82
  • Благодарностей: 8
    • Сообщения от fmman
Прошу извинить меня.
Должно быть так:
os.setf(static_cast<std::_Ios_Fmtflags>(flags)); // restore output stream format flags

Если можно, выложу в этой теме все поправленные, полностью рабочие исходники, через некоторое время.

Оффлайн fmman

  • **
  • Сообщений: 82
  • Благодарностей: 8
    • Сообщения от fmman
Внёс по минимуму все необходимые изменения в исходники. В библиотеках APC_ почти ничего не трогал, кроме того, что описано в постах выше.
В приложениях:
- удалены лишние и старые заголовки;
- добавлены недостающие и новые заголовки;
- код в некоторых приложениях, приводящий к ошибке доступа в <ios_base.h>, закомментирован. Файлов данных, чтобы его отладить, у меня нет. Кому надо, легко под себя допишет. Указывайте новый выходной файл при каждом новом запуске этих приложений;
- исправлены синтаксические ошибки, в т.ч. а) добавлены прототипы недостающих функций; б) тип main() заменён с void на int в соответствии со стандартом С++; в) функция exit(код) везде заменена на оператор возврата return код; г) добавлено необходимое приведение типов там, где это необходимо; д) ещё ряд мелочей, не заслуживающих внимания.
Все приложения проверил без файлов данных, которых у меня нет.

ИМХО, работа немецких авторов является выдающейся, представляет пользу при изучении теории и практики небесной механики, и является образцом для освоения обобщённого и объектно-ориентированного программирования на С++ (кроме STL).


Оффлайн gashaАвтор темы

  • ****
  • Сообщений: 319
  • Благодарностей: 12
  • 61:45:28,6 N 34:21:39.5 E (134 + 15 этаж) м
    • Сообщения от gasha
    • Siä Karjalassa
Огромное спасибо,    fmman)))

make файл:

#-------------------------------------------------------------------------------
#
# makefile
#
# Purpose:
#
#   Linux make file for C++ library and programs of
#   "O. Montenbruck, Th. Pfleger; Astronomy on the Personal Computer (4th ed.)"
#
# Notes:
#
#   The original version of this makefile has kindly been contributed by
#   <Graham.Rule@ed.ac.uk>.
#
#   To build the executable programs, copy all source and header files (*.cpp,
#   *.h) as well as this makefile into the working directory:
#      >tar -xvf /cdrom/APCe/Linux/apcesrc.tar
#      >cp /cdrom/APCe/Linux/makefile .
#   Then start the make tool:
#      >make
#
#-------------------------------------------------------------------------------

# A list of the header files used by the library files and applications
# (for information only):
#HEADERS=APC_Cheb.h APC_Const.h APC_DE.h APC_IO.h APC_Kepler.h APC_Math.h\
# APC_Moon.h APC_Phys.h APC_Planets.h APC_PrecNut.h APC_Spheric.h \
# APC_Sun.h APC_Time.h APC_VecMat3D.h GNU_iomanip.h

# The library is
LIB=libAPC.a

# and is made from the following object files
LIBOBJS=APC_Cheb.o APC_DE.o APC_IO.o APC_Kepler.o APC_Math.o APC_Moon.o \
APC_Phys.o APC_Planets.o APC_PrecNut.o APC_Spheric.o \
APC_Sun.o APC_Time.o APC_VecMat3D.o

# created from the following C++ source files
# (for information only)
#LIBSRC= APC_Cheb.cpp APC_DE.cpp APC_IO.cpp APC_Kepler.cpp APC_Math.cpp \
#APC_Moon.cpp APC_Phys.cpp APC_Planets.cpp APC_PrecNut.cpp \
#APC_Spheric.cpp APC_Sun.cpp APC_Time.cpp APC_VecMat3D.cpp

# The application files themselves are
APPLICS=AOEcat Coco Comet EclTimer Eclipse Foto Gauss Luna Numint \
Occult PPMbin PPMcat Phases Phys Planpos Planrise Sunset

# and are created from these source files
# (for information only)
#APPLICSRC=AOECat.cpp Coco.cpp Comet.cpp EclTimer.cpp Eclipse.cpp Foto.cpp \
#Gauss.cpp Luna.cpp Numint.cpp Occult.cpp PPMbin.cpp PPMcat.cpp \
#Phases.cpp Phys.cpp Planpos.cpp Planrise.cpp Sunset.cpp

# Our main target is to make all the applications:
all: $(APPLICS)

# The library is made from the object files by using 'ar'
libAPC.a: $(LIBOBJS)
ar rc $(LIB) $(LIBOBJS)

# Each of the application files, in addition to being dependant on its
# own source file, needs the library
$(APPLICS): $(LIB)

# The next two are just to clean up files which we may not need to keep
# Clean up all the object files that are now in the library
clean:
@rm -f $(LIBOBJS)

# Clobber all the generated files, including the library and applications
clobber: clean
@rm -f $(LIB) $(APPLICS)

Вот кк проходит компиляция:

gasha@almukantarat:~/Portable/APCe/astro003> make
g++    -c -o APC_Cheb.o APC_Cheb.cpp
g++    -c -o APC_DE.o APC_DE.cpp
g++    -c -o APC_IO.o APC_IO.cpp
g++    -c -o APC_Kepler.o APC_Kepler.cpp
g++    -c -o APC_Math.o APC_Math.cpp
g++    -c -o APC_Moon.o APC_Moon.cpp
g++    -c -o APC_Phys.o APC_Phys.cpp
g++    -c -o APC_Planets.o APC_Planets.cpp
g++    -c -o APC_PrecNut.o APC_PrecNut.cpp
g++    -c -o APC_Spheric.o APC_Spheric.cpp
g++    -c -o APC_Sun.o APC_Sun.cpp
g++    -c -o APC_Time.o APC_Time.cpp
g++    -c -o APC_VecMat3D.o APC_VecMat3D.cpp
ar rc libAPC.a APC_Cheb.o APC_DE.o APC_IO.o APC_Kepler.o APC_Math.o APC_Moon.o APC_Phys.o APC_Planets.o APC_PrecNut.o APC_Spheric.o APC_Sun.o APC_Time.o APC_VecMat3D.o
g++     AOEcat.cpp libAPC.a   -o AOEcat
g++     Coco.cpp libAPC.a   -o Coco
g++     Comet.cpp libAPC.a   -o Comet
Comet.cpp: In function ‘int main(int, char**)’:
Comet.cpp:198:45: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
g++     EclTimer.cpp libAPC.a   -o EclTimer
g++     Eclipse.cpp libAPC.a   -o Eclipse
g++     Foto.cpp libAPC.a   -o Foto
Foto.cpp: In function ‘int main(int, char**)’:
Foto.cpp:166:45: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
g++     Gauss.cpp libAPC.a   -o Gauss
Gauss.cpp: In function ‘int main(int, char**)’:
Gauss.cpp:686:45: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
g++     Luna.cpp libAPC.a   -o Luna
g++     Numint.cpp libAPC.a   -o Numint
Numint.cpp: In function ‘int main(int, char**)’:
Numint.cpp:342:45: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
g++     Occult.cpp libAPC.a   -o Occult
Occult.cpp: In function ‘int main(int, char**)’:
Occult.cpp:761:45: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
g++     PPMbin.cpp libAPC.a   -o PPMbin
g++     PPMcat.cpp libAPC.a   -o PPMcat
g++     Phases.cpp libAPC.a   -o Phases
Phases.cpp: In function ‘char* SolarEclipseFlag(double)’:
Phases.cpp:104:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
Phases.cpp:106:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:107:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:108:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:110:10: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp: In function ‘char* LunarEclipseFlag(double)’:                                                                                                                                                                                                                     
Phases.cpp:134:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:136:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:137:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:138:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:139:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:140:26: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
Phases.cpp:142:10: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]                                                                                                                                                                           
g++     Phys.cpp libAPC.a   -o Phys                                                                                                                                                                                                                                           
g++     Planpos.cpp libAPC.a   -o Planpos                                                                                                                                                                                                                                     
g++     Planrise.cpp libAPC.a   -o Planrise                                                                                                                                                                                                                                   
g++     Sunset.cpp libAPC.a   -o Sunset                                                                                                                                                                                                                                       
gasha@almukantarat:~/Portable/APCe/astro003>

Ещё раз большое спасибо))
БПЦ 15х50, Nikon Aculon 7x50, Celestron Advanced VX 8" N, Sky-Watcher BK 909AZ3, ТАЛ-65, Таир-3ФС, Canon EOS 60D, Sony Alpha NEX-3.

Оффлайн fmman

  • **
  • Сообщений: 82
  • Благодарностей: 8
    • Сообщения от fmman
Да не за что. Тут совсем немного работы.
На предупреждения типа:
Foto.cpp:166:45: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
(возможность потери никому ненужных методов класса string, кроме того char* в разы быстрее) можно смело забить.
Все исходники проверил на Visual Studio 12 Ultimate (лицензионка) - добавляется ещё одна ошибка приведения типов при передаче параметров в перегруженную функцию. Известно, что компилятор C/C++ от Microsoft заметно более безопасен в отношении типизации. Для исправления достаточно в месте вывода привести <int> к <double>.

Оффлайн Deimos

  • Модератор
  • *****
  • Сообщений: 17 406
  • Благодарностей: 309
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от Deimos
    • Белорусская любительская астрономическая сеть
Foto.cpp:166:45: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
По-хорошему слово const должно быть расставлено везде где выражение не должно быть не константным.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн fmman

  • **
  • Сообщений: 82
  • Благодарностей: 8
    • Сообщения от fmman
Совершенно согласен.  Ещё хуже  - повсеместная отложенная инициализация переменных. Это прямое следствие того, что программа переписывалась с Паскаля с его дубовым блоком var для переменных( >:().

Оффлайн Deimos

  • Модератор
  • *****
  • Сообщений: 17 406
  • Благодарностей: 309
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от Deimos
    • Белорусская любительская астрономическая сеть
Этот дубовый блок в паскале соответствует способу хранения на уровне архитектуры подавляющего большинства процессоров, что полезно для изучения программирования. В ранних версиях языка Си переменные тоже резервировались в начале подпрограммы.
Но это отнюдь не значит, что эти техники надо тащить до сегодняшнего дня.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн gashaАвтор темы

  • ****
  • Сообщений: 319
  • Благодарностей: 12
  • 61:45:28,6 N 34:21:39.5 E (134 + 15 этаж) м
    • Сообщения от gasha
    • Siä Karjalassa
Давайте продолжим)

На сей раз обратимся к Меёсу.

Берём исходники здесь или прямая ссылка.

1. Идём в каталог с исходниками:

:~/Portable/aaplus>

Временно скрываем файл AATest.cpp

2. По аналогии с Монтенбруком пробуем собрать библиотеку:

:~/Portable/aaplus> gcc -c AA*.cpp
:~/Portable/aaplus> ar rc aaplus.a *.o

3. Компилируем тестовый файл для проверки всех функций и классов:

:~/Portable/aaplus> gcc AATest.cpp aaplus.a

И получаем кучу однотипных ошибок:  AATest.cpp:(.text+0xa8c): undefined reference to `sin'  туда же и косинусы тангенсы квадраты и т.п.

Гугл посоветовал добавить опцию -lm

:~/Portable/aaplus> gcc -lm AATest.cpp aaplus.a
/tmp/cc0aeeyw.o:(.eh_frame+0x10b): undefined reference to `__gxx_personality_v0'
aaplus.a(AADate.o):(.eh_frame+0x31f): undefined reference to `__gxx_personality_v0'
aaplus.a(AADynamicalTime.o):(.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
aaplus.a(AAEclipses.o):(.eh_frame+0xab): undefined reference to `__gxx_personality_v0'
aaplus.a(AAElliptical.o):(.eh_frame+0x14b): undefined reference to `__gxx_personality_v0'
aaplus.a(AAEquationOfTime.o):(.eh_frame+0x6b): more undefined references to `__gxx_personality_v0' follow
collect2: error: ld returned 1 exit status

А что дальше делать, я уже не знаю.
БПЦ 15х50, Nikon Aculon 7x50, Celestron Advanced VX 8" N, Sky-Watcher BK 909AZ3, ТАЛ-65, Таир-3ФС, Canon EOS 60D, Sony Alpha NEX-3.