Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
SCRIMERS

Зарегистрирован: 21.03.2008 Сообщения: 270 Откуда: Sevastopol
|
Добавлено: Ср Июн 22, 2011 21:55 Заголовок сообщения: Quite Samplepool copy/paste use |
|
|
ребята, а можно работающий пример использования (генерация семплов под ХМ) с минифмод (С\С++) семпл-пула увидеть?
Желательно было бы увидеть код до 64К. А то тут взял проект настроенный в Вижуале, а какие библы туда включать, чтобы ехе не ожирел не знаю.
Цитата: | А то уже третий вечер ковыряюсь - никак не получается.
| Отковырял. Поправил quick tutorial и получил то что мне необходимо, а именно использование Семпл-пула для генерации семплов ХМ-модуля, используя его в качестве ресурса в интро.
Создал проект на VS, добавил minifmod, qsp-хедеры и в дебаг-режиме всё сделал.
Радостный я попробовал вставить все свои наработки в заранее найденный и подпиленный проект-заготовку для создания маленьких ехе-шников. Но случился опус: в дебаг-режиме всё компилится (правда размер выходного ехе понятное дело огромный), а вот в релиз-режиме падает на следующих еррорах:
Код: | 1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__rand"
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__srand"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)"
1>.\bin\64KBase_release.exe : fatal error LNK1120: 4 неразрешенных внешних элементов |
Как-то я это уже решал, но не помню как.
Товарищи кодеры помогите. Гугл облазил весь. За 3 дня у меня уже каша в голове. _________________ на русской Сцене мы удивляем друг друга тем, что вообще что-то делаем (с) manwe |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
Добавлено: Ср Июн 22, 2011 23:36 Заголовок сообщения: |
|
|
Ты что-то прилинковать забыл (скорее всего minifmod.lib) Настройки компиляции и линковки при включеной Релиз-версии смотри. Там для релиз и дебаг версии опции независимые. |
|
Вернуться к началу |
|
 |
SCRIMERS

Зарегистрирован: 21.03.2008 Сообщения: 270 Откуда: Sevastopol
|
Добавлено: Пт Июн 24, 2011 19:57 Заголовок сообщения: |
|
|
BiTL писал(а): | Ты что-то прилинковать забыл (скорее всего minifmod.lib) Настройки компиляции и линковки при включеной Релиз-версии смотри. Там для релиз и дебаг версии опции независимые. |
Ну если ошибка линковщика, то итак понятно, что что-то не прикреплено, а вот что - не ясно.
Явное прикрипление minifmod.lib ничего не даёт.
Кто бы знал, какую либу нужно присоединить.
Искал на гугле по этому поводу. Советовали подключить msvcrt.lib - тогда ошибка точки входа выходила, как её обойти я тоже не знаю
Код: | 1>msvcrt.lib(crtexew.obj) : error LNK2001: неразрешенный внешний символ "_WinMain@16" |
_________________ на русской Сцене мы удивляем друг друга тем, что вообще что-то делаем (с) manwe |
|
Вернуться к началу |
|
 |
Ized shader killer

Зарегистрирован: 28.12.2007 Сообщения: 128
|
Добавлено: Вс Июн 26, 2011 15:48 Заголовок сообщения: |
|
|
Код: |
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__rand"
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__srand"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)"
1>.\bin\64KBase_release.exe : fatal error LNK1120: 4 неразрешенных внешних элементов
|
ты в main.cpp используешь rand(), srand(), new, delete, эти функции реализованы в стандартной либе, но так как ты делаешь 64k, ты не должен использовать стдлибу, поэтому реализовывай свои собственные rand(), srand(), а new, delete ты можешь либо свои написать в стиле
Код: |
void * __cdecl operator new (unsigned int pSize)
{
return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pSize);
}
void __cdecl operator delete (void * ptr)
{
HeapFree(GetProcessHeap(), 0, ptr);
}
|
либо сразу использовать HeapAlloc/HeapFree.
А вообще постарайся обойтись без динамической памяти, используй глобальные переменные, но учти, так как ты линкуешь без стдлибы, то конструкторы объектов вызываться не будут.
И не ставь никогда на студию руссификатор, be cool. |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
Добавлено: Вс Июн 26, 2011 16:44 Заголовок сообщения: |
|
|
Ized писал(а): |
ты в main.cpp используешь rand(), srand(), new, delete, эти функции реализованы в стандартной либе, но так как ты делаешь 64k, ты не должен использовать стдлибу, поэтому реализовывай свои собственные rand(), srand(), а new, delete ты можешь либо свои написать в стиле
|
А я юзал всегда rand(), размер ехе-шника не напрягал при этом )
ЗЫ: я 6-ю студию юзал. |
|
Вернуться к началу |
|
 |
Ized shader killer

Зарегистрирован: 28.12.2007 Сообщения: 128
|
Добавлено: Вс Июн 26, 2011 20:08 Заголовок сообщения: |
|
|
Ты скорей всего линковал с динамической библиотекой msvcrt.dll, а если со статической линковать будешь, то размер вырастет. Раньше все это рестриктилось и не было гарантии, что либы нужной версии будут на компо-машине, сейчас я заценил правила Assembly - они там теперь это гарантируют, так что, Скримерс, можешь для своей демки на Эссембли линковать libc динамически - там можно.
Код: |
1>msvcrt.lib(crtexew.obj) : error LNK2001: неразрешенный внешний символ "_WinMain@16"
|
Ты с ней прилинковал, а точка входа у тебя наверняка
Так как ты пишешь не консольное приложение, а ультрахардкорную интру, то пиши
Код: |
BOOL WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
}
|
Скажу лишь, что квайты не юзают стандартных C-либ, мы пользуемся только WinAPI и Direct3D. |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
Добавлено: Вс Июн 26, 2011 20:49 Заголовок сообщения: |
|
|
Ized писал(а): | Ты скорей всего линковал с динамической библиотекой msvcrt.dll, а если со статической линковать будешь, то размер вырастет.
|
dll-ки ваще не юзал никогда, ну кроме bass.dll, а мои проекты и в Линукс (в Wine) запускаются
Под рукой нет к сожалению проектов. Винт надо старый цеплять, а то бы Scrimers'у конечно же выложил для примера.
PS: stdlib не критично раздувает exe-шник, пакуется же всё. Не, ну если пару килобайт будет выпирать, тогда имеет смысл свой rand влепить. |
|
Вернуться к началу |
|
 |
SCRIMERS

Зарегистрирован: 21.03.2008 Сообщения: 270 Откуда: Sevastopol
|
Добавлено: Пн Июн 27, 2011 13:48 Заголовок сообщения: |
|
|
1. Всё что связано с этими ошибками используется в Сэмплпуле квайтсов. У меня ничего такого нет в коде - это я готовлю шаблон для себя, там минимум всего: Сэмплпул+ОГЛ+РасширенияОГЛ.
Код: | 1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__rand"
1>main.obj : error LNK2001: неразрешенный внешний символ "__imp__srand"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)"
1>main.obj : error LNK2001: неразрешенный внешний символ ""void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z)" |
Это было решено через msvcrt.LIB
Далее я пришёл к такой лаже, которую как-то обходил, но сейчас почему-то она появилась, как её решить не знаю.
Вот мои линки
Код: | "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"
и
opengl32.lib glu32.lib glut32.lib msvcrtold.lib lib\minifmod.lib lib\winmm.lib
|
Кому интересно может глянуть шаблон здесь (VS 2010)
http://upload.net.ua/download.php?file=empty_zip46
Если получится все проблемы решить - будет шаблон для программирования - поделюсь со всеми, кому нужно. _________________ на русской Сцене мы удивляем друг друга тем, что вообще что-то делаем (с) manwe |
|
Вернуться к началу |
|
 |
SCRIMERS

Зарегистрирован: 21.03.2008 Сообщения: 270 Откуда: Sevastopol
|
Добавлено: Вт Июн 28, 2011 12:39 Заголовок сообщения: |
|
|
Вообщем отказался от libext.h, а всё что в нём было (заголовки и инициализация нужных функций) перенёс в главную функцию.
В голове главного файла
Код: | PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL; |
и где-то по коду инциализация
Код: | glBindBufferARB = (PFNGLBINDBUFFERARBPROC) getProcAddress ( "glBindBufferARB" ); |
_________________ на русской Сцене мы удивляем друг друга тем, что вообще что-то делаем (с) manwe |
|
Вернуться к началу |
|
 |
Ized shader killer

Зарегистрирован: 28.12.2007 Сообщения: 128
|
Добавлено: Чт Июн 30, 2011 10:24 Заголовок сообщения: |
|
|
Use Direct3D, be cool. |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
Добавлено: Чт Июн 30, 2011 10:42 Заголовок сообщения: |
|
|
Ized писал(а): | Use Direct3D, be cool. |
не кул, он не кроссплатформенный ) Мастдай ) |
|
Вернуться к началу |
|
 |
Ized shader killer

Зарегистрирован: 28.12.2007 Сообщения: 128
|
Добавлено: Чт Июн 30, 2011 12:31 Заголовок сообщения: |
|
|
линукс фигня мне не понравилось !!!!!!!!!!! остоётся токо ждать лутшего.Это для меня говно плохо зделана тупо.Немогли зделать всё как в Windovs |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
Добавлено: Чт Июн 30, 2011 16:48 Заголовок сообщения: |
|
|
Ized писал(а): | линукс фигня мне не понравилось !!!!!!!!!!! остоётся токо ждать лутшего.Это для меня говно плохо зделана тупо.Немогли зделать всё как в Windovs |
Ага, FreeBSD, MacOS, Android - тоже фигня.
Если сделать всё как в Виндавс - это будет Виндавс  |
|
Вернуться к началу |
|
 |
unc
Зарегистрирован: 23.09.2007 Сообщения: 150 Откуда: spb
|
Добавлено: Чт Июн 30, 2011 19:21 Заголовок сообщения: |
|
|
директх 9 пиздатая штука батя тож юзает грит малаца хорошо зделали |
|
Вернуться к началу |
|
 |
MAM
Зарегистрирован: 26.09.2007 Сообщения: 36
|
Добавлено: Пн Июл 04, 2011 07:56 Заголовок сообщения: |
|
|
да!
qsp использует некоторые стандартные функции,
которые сам не описывает.
начало qsp.h:
Код: | //
//// Quite SAMPLEPOOL header
//
// Following functions and constants must be defined:
// sin(), cos(), tan(), abs()
// pow(double, double), pow(double, int)
// log(), exp(), floor()
// srand(), rand(), RAND_MAX, PI
// You can use this code to do it:
//
#include <math.h>
#include <stdlib.h>
//
#ifndef PI
#define PI 3.14159265358979
#endif
// |
|
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|