Линковка в VS
Решил тут поэкспериментировать =) Скучно стало =)
Захотелось собрать пак патчей от rsa с его же скриптами. Ядро скомпилилось нормально, а вот скрипты... Скомпилировались, но не проходит линковка объектов: Код:
1>sc_boss_spell_worker.obj : error LNK2001: неразрешенный внешний символ ""class SpellAuraHolder * __cdecl CreateSpellAuraHolder(struct SpellEntry const *,class Unit *,class WorldObject *,class Item *)" (?CreateSpellAuraHolder@@YAPAVSpellAuraHolder@@PBUSpellEntry@@PAVUnit@@PAVWorldObject@@PAVItem@@@Z)" Код:
1>ScriptLoader.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl AddSC_boss_infinite_corruptor(void)" (?AddSC_boss_infinite_corruptor@@YAXXZ) в функции "void __cdecl AddScripts(void)" (?AddScripts@@YAXXZ) С первым примером - вызывается SpellAuraHolder, но этот класс не разрешён. Каким образом и где происходит это самое разрешение. Уже просто ради собственного интереса и развития интересует =) |
Буквально вчера, в рамках тестирования новой проги, подгонял репозиторий rsa на Win.
Рева, правда, старая совсем, где-то в районе 10190 Код:
diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h |
LordJZ, огромное спасибо =) Я же писал, что прога твоя и вправду полезная =)
Надо будет всё-таки скачать =) |
Цитата:
а что до первой ошибки - просто линкуй статик. |
Цитата:
"просто линкуй статик." - клёва - для меня это звучит аналогично "лжгфырпдука" - пример бы - вот Лорд доходчиво объяснил =) |
Цитата:
|
Цитата:
|
Скомпилил... Всё что надо нашёл. Но пришлось отказаться от такого:
в скрипте используется вот что: Код:
sWorld.GetConf() Код:
#define sWorld MaNGOS::Singleton<World>::Instance() |
rsa хотел объяснить, что для компиляции в винде надо все пути к файлам и ссылки на файлы прописывать самому ручками. :)
Работа с библиотеками динамической компоновки (DLL) |
Цитата:
А вот чтобы слинковать в динамик (маленький .exe и 2 большие .dll), нужны таблицы экспортов, которые заполняются объявлениями что показал Лорд. По умолчанию Владимир те функции не экспортирует. В линуксях по умолчанию в отдельный модуль линкуются только скрипты, потому-то у меня все и компилируется нормально. |
Цитата:
|
Да, экспортить синглтоны в SD — извращение, имхо, я у себя, когда компилил rsa, тоже убрал все использования sWorld.
|
Собственно, так я и поступил - закомментил эти куски =) Но всё равно интересно, как можно разрешить использовать конструкцию типа sWorld.GetConf() в скриптах SD2 - ради собственного развития =)
|
Ошибки при компиляции
Код:
Ошибка 1463 error LNK2001: неразрешенный внешний символ ""private: static bool MaNGOS::Singleton<class World,class MaNGOS::SingleThreaded<class World>,class MaNGOS::OperatorNew<class World>,class MaNGOS::ObjectLifeTime<class World> >::si_destroyed" (?si_destroyed@?$Singleton@VWorld@@V?$SingleThreaded@VWorld@@@MaNGOS@@V?$OperatorNew@VWorld@@@3@V?$ObjectLifeTime@VWorld@@@3@@MaNGOS@@0_NA)" instance_trial_of_the_champion.obj ScriptDev2 Код:
Ошибка 1469 error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl World::~World(void)" (??1World@@QEAA@XZ) в функции "public: void * __cdecl World::`scalar deleting destructor'(unsigned int)" (??_GWorld@@QEAAPEAXI@Z) instance_trial_of_the_champion.obj ScriptDev2 Код:
Ошибка 1470 error LNK2001: неразрешенный внешний символ ""public: __cdecl World::~World(void)" (??1World@@QEAA@XZ)" instance_halls_of_reflection.obj ScriptDev2 |
|
И все-таки, у меня возникает такое чувство, что поиском кроме меня пользоваться умеет малая часть сообщества. Поэтому, закрывая уже четвертый топик на эту тему, я выложу-таки ссылку.
http://ru-mangos.ru/showthread.php?t=2043 Да блин! Это уже даже давно самим rsa поправлено! Старые исходники используете. Может пора обновиться? KiriX |
Цитата:
|
Так никто и не сказал, как разрешить конфликт с sWorld, не удаляя строки.
|
Экспортировать синглетон в скрипты. Или слинковать статически. Но проще все же удалить тем более что этот эксперимент все равно пока не работает...
|
|
trtw89, полагаю просто воспользоватся ответом rsa и удалить данный эксперимент, http://paste2.org/p/1035144
|
Собственно воспользовался "патчем", но теперь вылетают следующие ошибки.
Код:
1>boss_the_lich_king.obj : error LNK2001: неразрешенный внешний символ ""private: void __cdecl BSWScriptedAI::_resetTimer(unsigned char)" (?_resetTimer@BSWScriptedAI@@AEAAXE@Z)" |
А с этим - в морг. Имплементация скриптов методом копирования по F5 в какой-то левый SD2 в данном случае не пройдет.
|
пачкаю
Код:
$ patch -p1 < rsa.patch можно еще подсказку? :) |
Ну вообще, я компилирую sd2 от rsa.
trtw89, пару файлов можно и руками подправить Понимаю, что ошибки вылетают из-за моей криворукости, но |
trtw89, задайте этот вопрос тому кто сделал rsa.patch
я такого не делал никогда и не буду. git pull и ваши волосы... madbroths, не надо вешать лапшу на уши, это абсолютно точно не мой SD2. скорее всего вы пытаетесь привинтить мои скрипты на SD2 от Карателя. попробуйте сделать git clone и увидите, что таких ошибок у вас не будет. |
Ок, rsa. Спорить бесполезно - попробую еще раз взять ТОЧНО ваши скрипты, и перекомпилировать.
Сегодня пробовал еще раз перекомпилировать скрипты RSA, но опять тот же ворох ошибок. rsa - скачивал последний коммит. |
чуть более подробно:
1. исходники rsa 2. ядро win x64 собираеться без проблем 3. в сд2 при компиле выскакивают ошибки (3 босса из ульды и boss_loken) - исправляю заменой этих файлов из чистого сд2. 4. компилю уже с 4 этими заменеными файлами и уже ошибки в самом конце при компоновке длл. (постил выше) |
Цитата:
правка ошибки из поста выше описана еще выше. |
rsa какбы намекает нам, о том что нужно нафиг выкинуть винду и визуал студио и компилировать в линухе
|
Нет, он намекает, что ошибка, связанная с локеном, исправляется добавлением double float, а ошибки с sWorld - удалением двух строк в двух файлах триала, которые получают данные из конфига сервера.
|
Вот пост, в котором исправляет человек ошибку с локеном
Ага! Наконец то скомпилировал без ошибок. Суть проблемы была в следующем - я не добавил файлы в проект в фильтр base. RSA, ты не против если я создам форк твоих скриптов и подгоню их под визуал студио? |
сообственно все ошибки при компили под винду ScriptDev2 с форка Rsa исправил столкнулся с затруднением я просто не спец особо но:
PHP код:
|
Скорей всего void AddSC_oculus(); определен в загрузчике, но его нет на самом деле в исходниках. Закоментируй его в ScriptLoader.cpp или поищи в исходниках, если хочешь знать точнее.
|
Все в исходниках есть . Добавьте файл oculus.cpp в проект.
|
да я на все плюнул и собрал проэкт по новой ваще не каких проблем нет Rsa спасибо за твои работы:yes3:
|
Доброе время суток,
Не знал где отписать, и вроде в теме нашел что пробовали компилить исходники от rsa Сильно не пинайте я начинающий :pardon: 1 исходники от rsa (10.12.2010) 2 пробовал VS 2008 и VS2010 Ядро компилится в порядке без каких либо проблем, но вот со скриптами: хотя есть несколько предупреждений но они не столь важны: Код:
..\..\src\game\Level3.cpp(4794) : warning C4018: '>' : signed/unsigned mismatch предупреждение: Код:
Код:
c1xx : fatal error C1083: Cannot open source file: '..\scripts\northrend\ulduar\ulduar\boss_xt_002.cpp': No such file or directory первые 3 ошибок исправляются 2 способами: 1 способ заходим в ..\scripts\northrend\ulduar\ulduar\ и видим что они вроде присутствуют но переименованы, кроме assembly_of_iron.cpp: boss_xt_002.cpp -> boss_xt002.cpp boss_general_vezax.cpp -> boss_vezax.cpp boss_flame_leviathan.cpp -> boss_leviathan.cpp assembly_of_iron.cpp вообще нету 2 способ заходим в фаил 90ScriptDev2.vcproj и находим вот эти строчки Код:
<File Код:
<File Код:
..\scripts\northrend\ulduar\halls_of_lightning\boss_loken.cpp(147) : error C3861: 'round': identifier not found Код:
double round(double value) { вот тут и не знаю что делать: Код:
Creating library ..\..\..\..\bin\win32_release/mangosscript.lib and object ..\..\..\..\bin\win32_release/mangosscript.exp может кто что подскажет где капать и даст совет |
вот же тут написан ответ читаейте внимательнее форум http://paste2.org/p/1035144
|
Цитата:
http://paste2.org/p/1133470 но все же спасибо http://paste2.org/p/1133470 правки помогли исправит проблему |
Текущее время: 22:46. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS