 |
Меню |
|
|
|
|
 |
Главная |
|
| Посл.ответ |
Сообщение |
|
Дата: 9 Июл, 17:25
Уважаемые посетители форума,ситуация такая:
-Есть шаблон:
//----------------------------------------------
template<class T>
void cashtest_shabl(value_cycles *pstrt, value_static *staticstrt, uint_t numcycls)
{
double cycle1;
double cycle2;
uint_t elemsize = sizeof(T) * SIZE_MEM;
T y = (T)0;
T x = (T)1;
printf( "Long double size is: %d bits.
", sizeof(T) * 8 );
/* snap the time */
cycle1 = ClockCycles(); //стартуем
for( uint_t i = 0; i < SIZE_MEM; i++ )
{
x = y;
}
/* snap the time again */
cycle2 = ClockCycles(); //засекаем
double num_cycles_mem = cycle2 - cycle1;
staticstrt->num_sec_96cash = (double)num_cycles_mem / pstrt->cycles_per_sec;
staticstrt->num_speed_96cash = elemsize * pstrt->cycles_per_sec / num_cycles_mem / 1024;
printf( " Speed is = %0.3f Kb/sec
", staticstrt->num_speed_96cash );*/
};
//*******************************************************
-При вызове его из тела main
//*******************************************************
cashtest_shabl<long double>(pstrt,staticstrt,numcycls)
//*******************************************************
именно в єтом месте,при компиляции, выдаёт ошибку: INSTANTIETED FROM HERE
Что самое интересное когда тело ф-и пустое то компилит без ошибки, а когда там есть хотя-бы одна строка кода ошибка появляется...
-И еще одна ошибка появляется, которую сложно характеризировать.... В месте
cycle1 = ClockCycles(); //стартуем
for( uint_t i = 0; i < SIZE_MEM; i++ )
{
x = y;
}
Появляесться тоже ошибка `volatile' undeclared(first use this function)...
Никто не знает как это исправить?
P.S. Писалось все под
QNX® Momentics® Integrated Development Environment
Version: 3.0.0
Build id: 200509222156
Установленой в Windows XP
Под QNX-ом ошибки теже... |
|
Дата: 9 Июл, 19:55
Приведите полный текст ошибки, то что после "instantiated from here...".
|
|
Дата: 9 Июл, 21:12
Суть в том что это и есть полный код ошибки
Мне нет смысла давать вам не полную информацию о проблеме! |
|
Дата: 9 Июл, 21:21
Тоесть ошибка "instantiated from here" указывает на строку вызова шаблонной функции:
cashtest_shabl<long double>(pstrt,staticstrt,numcycls).
Как я догадываюсь, конечно это может быть не так, вызывать такую ф-ю нужно как-то по другому потому что при написании других шаблонных функций проблема та же. А вот как мне не известно... и help-a к сожалению молчит  |
|
Дата: 9 Июл, 23:27 · Поправил: Olej
Hagen_001
<i>P.S. Писалось все под </i>
1. версия компилятора? 2.95 / 3.3.x ?
2.
value_cycles *pstrt, value_static *staticstrt,
- а это что за типы?: value_cycles? value_static?
- это полный пример?  |
|
Дата: 9 Июл, 23:45 · Поправил: Hagen_001
To Olej:
1.QNX® Momentics® Integrated Development Environment
Version: 3.0.0
Build id: 200509222156
2.а это что за типы?: value_cycles? value_static?
#ifndef _DEFTEST_H_
#define _DEFTEST_H_
#include <stdlib.h>
#include <stdio.h>
#include <sys/neutrino.h>
#include <inttypes.h>
#include <math.h>
#include <sys/syspage.h>
#include <inttypes.h>
#include <sys/procfs.h>
#include <fcntl.h>
#include <sys/times.h>
#include <sys/siginfo.h>
#include <signal.h>
#include <time.h>
#include <sys/netmgr.h>
#include <math.h>
typedef unsigned int uint_t;
typedef struct value_cycles_t
{
double num_cycles;
double cycles_per_sec;
double num_cycles_add;
double num_cycles_sub;
double num_cycles_ mul;
double num_cycles_div;
double num_cycles_64add;
double num_cycles_64sub;
double num_cycles_64mul;
double num_cycles_64div;
double num_cycles_32add;
doubl e num_cycles_32sub;
double num_cycles_32mul;
double num_cycles_32div;
double num_ cycles_16add;
double num_cycles_16sub;
double num_cycles_16mul;
double num_cycles_16 div;
double num_cycles_8add;
double num_cycles_8sub;
double num_cycles_8mul;
do uble num_cycles_8div;
} value_cycles;
typedef struct value_static_t
{
double num_sec_add;
double num_sec_sub;
double num_sec_mul;
doub le num_sec_div;
double num_sec_64add;
double num_sec_64sub;
double num_sec_64mul;
double num_sec_64div;
double num_sec_32add;
double num_sec_32sub;
double num_sec_32m ul;
double num_sec_32div;
double num_sec_16add;
double num_sec_16sub;
double num _sec_16mul;
double num_sec_16div;
double num_sec_8add;
double num_sec_8sub;
doubl e num_sec_8mul;
double num_sec_8div;
double num_oper_add;
double num_oper_sub;
double num_oper_mul;
double num_oper_div;
double num_oper_64add;
double num_oper_6 4sub;
double num_oper_64mul;
double num_oper_64div;
double num_oper_32add;
double num_oper_32sub;
double num_oper_32mul;
double num_oper_32div;
double num_oper_16ad d;
double num_oper_16sub;
double num_oper_16mul;
double num_oper_16div;
double nu m_oper_8add;
double num_oper_8sub;
double num_oper_8mul;
double num_oper_8div;
double num_cycloper_add;
double num_cycloper_sub;
double num_cycloper_mul;
double num_cycloper_div;
double num_cycloper_64add;
double num_cycloper_64sub;
double num_cycloper_64mul;
double num_cycloper_64div;
double num_cycloper_32add;
double num_cycloper_32sub;
double num_cycloper_32mul;
double num_cycloper_32div;
double num_cycloper_16add;
double num_cycloper_16sub;
double num_cycloper_16mul;
double num_cycloper_16div;
double num_cycloper_8add;
double num_cycloper_8sub;
double num_cycloper_8mul;
double num_cycloper_8div;
double num_sec_80mem1;
double num_speed_80mem1;
double num_sec_80mem2;
double num_speed_80mem2;
double num_sec_80mem3;
double num_speed_80mem3;
double num_sec_80mem4;
double num_speed_80mem4;
double num_sec_64mem1;
double num_speed_64mem1;
double num_sec_64mem2;
double num_speed_64mem2;
double num_sec_64mem3;
double num_speed_64mem3;
double num_sec_64mem4;
double num_speed_64mem4;
double num_sec_32mem1;
double num_speed_32mem1;
double num_sec_32mem2;
double num_speed_32mem2;
double num_sec_32mem3;
double num_speed_32mem3;
double num_sec_32mem4;
double num_speed_32mem4;
double num_sec_16mem1;
double num_speed_16mem1;
double num_sec_16mem2;
double num_speed_16mem2;
double num_sec_16mem3;
double num_speed_16mem3;
double num_sec_16mem4;
double num_speed_16mem4;
double num_sec_8mem1;
double num_speed_8mem1;
double num_sec_8mem2;
double num_speed_8mem2;
double num_sec_8mem3;
double num_speed_8mem3;
double num_sec_8mem4;
double num_speed_8mem4;
double num_sec_96cash;
double num_speed_96cash;
double num_sec_64cash;
double num_speed_64cash;
double num_sec_32cash;
double num_speed_32cash;
double num_sec_16cash;
double num_speed_16cash;
double num_sec_8cash;
double num_speed_8cash;
} value_static;
#define SUCCESS 1
#define NOSUCCESS 0
#define SIZE_MEM 2000000
template<class T>void cashtest_shabl(value_cycles *pstrt, value_static *staticstrt, uint_t numcycls);
#endif //_DEFTEST_H_
|
|
Дата: 9 Июл, 23:57
- это полный пример?
Самое интересное что даже такой код:
//********************************************
Template<class T>void funtest()
{
T Ttype;
}
int main(int argc, char *argv[])
{
funtest<int>();
return EXIT_SUCCESS;
}
//********************************************
выдаёт ошибку:"INSTANTIETED FROM HERE"  |
|
Дата: 10 Июл, 11:31
Hagen_001 1.QNX® Momentics® Integrated Development Environment
Version: 3.0.0
Build id: 200509222156
- я спрашивал версию компилятора - у вас их 2: 2.95.3 & 3.3.5 (или 3.3.1 если SP2 не стоит), например так:
# qcc -v
cc: looking for gcc_ntox86 in /usr/qnx630/host/qnx6/x86/etc/qcc/gcc/3.3.5/gcc_ntox86++.conf
cc: looking for gcc_ntox86 in /usr/qnx630/host/qnx6/x86/etc/qcc/gcc/3.3.5/gcc_ntox86.conf
cc: no files to process
- видно, что у меня по умолчанию используется 3.3.5;
- у вас, скорее всего - 2.95.3;
- версии отличаются совместимостью с ASII: что работает в одной - синтаксически может быть некорректно в другой, и наоборот... относительно template это особенно проявляется.
- но это "тонкие эффекты", здесь до этого дело ещё не дошло:
Hagen_001 выдаёт ошибку:"INSTANTIETED FROM HERE"
- не выдаёт!
#include <stdlib.h>
#include <iostream>
using std::cout;
using std::endl;
template<class T> void funtest( void) {
T Ttype;
cout << sizeof( T ) << endl;
};
int main( int argc, char* argv[] ) {
funtest<int>();
funtest<double>();
exit( EXIT_SUCCESS );
};
- это ваш пример?  А теперь:
1.make-файл для версии 3.3.5 (make3):
CC = QCC -V3.3.1,gcc_ntox86 -Y_gpp -Wno-deprecated
CFLAGS = -fexceptions -O3 -I/usr/include
all: tp3-1
.SUFFIXES: .cc
.cc:
$(CC) $(CFLAGS) $< -o $@
strip $@
- я специально неточно указываю версию, чтобы получить сообщение:
# make -fmake3
QCC -V3.3.1,gcc_ntox86 -Y_gpp -Wno-deprecated -fexceptions -O3 -I/usr/include tp3-1.cc -o tp3-1
cc: warning - requested version 3.3.1, using version 3.3.5
strip tp3-1
# tp3-1
4
8
2. теперь то же самое для версии 2.95.3 :
CC = QCC -V2.95.2,gcc_ntox86 -Y_gpp -Wno-deprecated
CFLAGS = -fexceptions -O3 -I/usr/include
all: tp2-1
.SUFFIXES: .cc
.cc:
$(CC) $(CFLAGS) $< -o $@
strip $@
- tp2-1.cc & tp3-1.cc - это эквивалентные файлы, с содержимым нарисованным выше.
# make -fmake2
QCC -V2.95.2,gcc_ntox86 -Y_gpp -Wno-deprecated -fexceptions -O3 -I/usr/include tp2-1.cc -o tp2-1
cc: warning - requested version 2.95.2, using version 2.95.3
strip tp2-1
# tp2-1
4
8
P.S. всё показанное скопировано с терминала. |
|
Дата: 10 Июл, 11:54
Да,действительно версия 2.95.3... Значит ошибка из-за не той версии компилятора...
А вы не знаете как можно пропатчить мою версию компилятора чтобы не выдавало ошибку?
|
|
Дата: 10 Июл, 12:23
Hagen_001 Да,действительно версия 2.95.3... Значит ошибка из-за не той версии компилятора...
Я не думаю, что всё так просто  - я же вам привёл пример и в 2.95.3 и в 3.3.5, и оба дают вразумительный и предсказуемый результат. Но вести себя будут компиляторы в более сложных случаях - по разному.
Достаточно часто я видел ошибку: "instantiated from here...", когда компилируешь template-код 2.95.3 по недосмотру, который месяцами успешно компилировался 3.3.5.
Но гораздо чаще это бывает, когда есть какие-то синтаксические несоответствия с самим типом T, от которого производится шаблон - в первую очередь стоит поиграться с программой с определениями типа Т но без шаблонов.
Hagen_001 А вы не знаете как можно пропатчить мою версию компилятора чтобы не выдавало ошибку?
Знаю
Есть 2 (а может и больше) способов:
1.явно указывать требуемую версию в Makefile для конкретной компиляции, ключ: -V3.3.1,gcc_ntox86 (и -Y_gpp посмотрите, не лишнее будет), и вообще:
# use QCC
- там всё есть.
2. определить используемую версию по умолчанию:
- в /usr/qnx630/host/qnx6/x86/etc/qcc/gcc у вас есть файл default;
- его содержимое примерно такое:
DIR=2.95.3
- переименуйте его (пригдится  ) в default.old, а в default впишите:
DIR=3.3.5
Во 2-м способе можете иметь некоторые неприятности с PhAB приложениями ... не столько с -V3.3.1,gcc_ntox86, сколько с GNU библиотеками: -Y_gpp - я не знаю способа собрать Photon приложение с GNU библиотеками - может это просто невозможно?
Об том же подробнее:
http://qnxclub.net/modules.php?name=Forums&file=viewtopic&t=332 |
|
Дата: 10 Июл, 12:27
Olej версию компилятора - у вас их 2: 2.95.3 & 3.3.5 (или 3.3.1 если SP2 не стоит),
Имеющиеся у вас альтернативы можете точно посмотреть:
# QCC -V
(именно V большое). |
|
Дата: 10 Июл, 13:02 · Поправил: Olej
По примеру кода + ещё одно соображение, не имеющее отношения к самому вопросу, вот это место:
Hagen_001
double cycle1;
double cycle2;
/* snap the time */
cycle1 = ClockCycles(); //стартуем
for( uint_t i = 0; i < SIZE_MEM; i++ )
{
x = y;
}
/* snap the time again */
cycle2 = ClockCycles(); //засекаем
double num_cycles_mem = cycle2 - cycle1;
- если временные интервалы, которые вы собираетесь мерять - достаточно большие, то лучше использовать time_t - системное время;
- а если - малые, и с высокой точностью (для чено и процессорные циклы), то тогда вы в измерения свои включаете и время преобразований величин uint64_t -> double;
- как по мне, то лучше так:
static uint64_t cps = SYSPAGE_ENTRY(qtime)->cycles_per_sec;
static double c2s = 1.0E9 / cps;
...
uint64_t cycle1 = ClockCycles(); //стартуем;
// бла-бла-бла... меряем
cycle1 = ClockCycles() - cycle1;
double num_cycles_mem = cycle1 * c2s;
- что-то такое ... |
|
Дата: 10 Июл, 13:19
Olej 1. версия компилятора? 2.95 / 3.3.x ?
Обратите внимание ещё вот на это ( если ещё не обратили  ) - GCC 4.x :
http://qnx.org.ru/viewthread10n4927.html
- это очень интересно;
- но с этим придётся повозиться;
- + выверить всё тщательнейше, относительно библиотек, в первую очередь, потому как все риски здесь вы берёте на себя. |
|
Дата: 10 Июл, 14:12
Огромное спасибо за помощь!
Изменил версию компилятора в файле вручную первым методом пока не пользовался... нужно разбираться...
А пока всё компилит....
С материалом который вы подкинули буду разбираться только позже сейчас проэкт переделать нужно..
|
|
Дата: 10 Июл, 15:09 · Поправил: Olej
Olej
- что-то такое ...
вот к примеру
int main( int argc, char* argv[] ) {
const int N = 1000;
uint64_t cycle1, cycle2, sum1 = 0;
for( int i = 0; i < N; i++ ) {
// минимально возможный интервал
cycle1 = ClockCycles();
cycle2 = ClockCycles();
sum1 += cycle2 - cycle1;
};
sum1 /= N;
double cycle3, cycle4, sum2 = 0;
for( int i = 0; i < N; i++ ) {
cycle3 = ClockCycles();
cycle4 = ClockCycles();
sum2 += cycle4 - cycle3;
};
sum2 /= N;
cout << sum1 << " - " << sum2 << endl;
exit( EXIT_SUCCESS );
};
и разница:
# tp3-2
32 - 48.001
|
|
Дата: 11 Июл, 22:28
Удивительно но Momentics даже не компилит стандартные проекты(при создании проэкта не добавляю ниодной строки), уважаемые господа, никто не знает как можно решить эту проблему? Это произошло как-то само собой.... писал код... а потом началось! Это какая-то подстава!
|
|
Дата: 12 Июл, 07:11
Лечится удалением /root/workspace/.metadata.
|
|
Дата: 12 Июл, 08:07
Хм..Hagen_001.. а скажите где у Вас объявлена ..и описана Ваша функция cashtest_shabl..?
Я к тому.. что шаблоны вроде незя как разделять на .H и .CPP
Ибо инстанцирование выполняеца в момент компиляции!
Попробуйте поместить все в один файл (.h-овский)..я имею ввиду тело функции.
|
|
Дата: 12 Июл, 08:09
(..ну понятно, я упускаю всякие export-ы .. ибо про эту поддержку компилятором нужно еще прочитать.. где-то)
|
|
Дата: 12 Июл, 08:48 · Поправил: Hagen_001
To qnxloder
Удалил /root/workspace/.metadata.  После чего даже проєкт не создаётся... а раньше создавалса...хоть ни так обидно было..
To lastcross
qnxloder
Я же уже говорил что не в коде дело.... шаблоны у меня описаны в одном СPP файле...так что не в єтом проблема..
Кстати вот ошибки которые возникают при компиляции проэкта аля "Hello world!...."
Severity Description Resource In Folder Location Creation Time
2 *** [E:/QNX630/workspace/test/arm/o-be/test] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/arm/o-be-g/test_g] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/arm/o-le/hjj] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/arm/o-le-g/test_g] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/mips/o-be/test] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/mips/o-be-g/test_g] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/mips/o-le/test] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/mips/o-le-g/test_g] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/ppc/o-be/test] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/ppc/o-be-g/test_g] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/sh/o-le/test] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/sh/o-le-g/test_g] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/x86/o/test] Error 1 test 11 Июль 2007 г. 23:14:17
2 *** [E:/QNX630/workspace/test/x86/o-g/test_g] Error 1 test 11 Июль 2007 г. 23:14:17
2 /cygdrive/e/QNX630/host/win32/x86/usr/bin/arm-unknown-nto-qnx6.3.0-ld cannot find -lcpp test line 0 11 Июль 2007 г. 23:14:17
2 /cygdrive/e/QNX630/host/win32/x86/usr/bin/i386-pc-nto-qnx6.3.0-ld cannot find -lcpp test line 0 11 Июль 2007 г. 23:14:17
2 /cygdrive/e/QNX630/host/win32/x86/usr/bin/mips-unknown-nto-qnx6.3.0-ld cannot find -lcpp test line 0 11 Июль 2007 г. 23:14:17
2 /cygdrive/e/QNX630/host/win32/x86/usr/bin/powerpc-unknown-nto-qnx6.3.0-ld cannot find -lcpp test line 0 11 Июль 2007 г. 23:14:17
2 /cygdrive/e/QNX630/host/win32/x86/usr/bin/sh-unknown-nto-qnx6.3.0-ld cannot find -lcpp test line 0 11 Июль 2007 г. 23:14:17 |
You must login to post.
| | |