Menu

Настройки проектов использующих SObjectizer

Help
kais
2006-09-14
2013-04-11
  • kais

    kais - 2006-09-14

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

    Найти настройки в проектных файлах Mxx_Ru примеров я не смог.

    Спсибо

     
    • Yauheni Akhotnikau

      Я не совсем понял вопрос.
      Если вы хотите узнать, какие опции выставляет mxx_ru когда компилирует SObjectizer, то запустите mxx_ru с ключем --mxx-cpp-extract-options:

      ruby so_4/prj.rb --mxx-cpp-release --mxx-cpp-extract-options

      То же самое нужно проделать и в случае, когда хотите, чтобы SObjectizer компилировался в виде статической библиотеки. Только предварительно нужно создать в каталоге рядом с build.rb файл .so4.static

       
    • kais

      kais - 2006-09-15

      Спасибо Евгений.
      Очень помогло. Не подумал даже использовать данную команду для примеров и тестов.

      Правда есть ещё пара спорных моментов и проблем с компиляцией.
      Но надеюсь, что чтение инструкций мне поможет.

       
      • Yauheni Akhotnikau

        Нет проблем. Если будут вопросы -- спрашивайте, не стесняйтесь.

        Пользуясь случаем задам вопрос в офтопик: а почему бы не начать использовать mxx_ru для проектов вместе с SObjectizer? Есть какие-то препятствия?

         
    • kais

      kais - 2006-09-18

      Заранее прошу прощения, но опять повторюсь.
      Никак не могу довести до ума копиляцию SObjectizer и проектов его использующих. Просто валится ворох ошибок, которых быть не должно ( и каждый раз разные :) )
      Проверял на двух системах,
      на win2k server получаю error LNK2001: unresolved external symbol при компиляции в режиме статических библиотек
      на win2k pro получаю error LNK2001: unresolved external symbol при компиляции в режиме динамических библиотек

      Конечной целью  я надеюсь откомпилировать Sobjectizer пример в виде проекта VisualStudio.

      Подскажите пожалуйста, может необходмо дописать что нибудь в переменные окружения include и lib ?

      E > “а почему бы не начать использовать mxx_ru для проектов вместе с SObjectizer?”

      Несколько раз думал. Весьма радуют приличная скорость и низкая загрузка системы. Однако VisualStudio всё-таки остается основной средой разработки. Так что основной моей проблемой видится совместное использование Mxx_Ru и MSVS, кажется, что очень неудобно будет/
      Евгений, опишите пожалуйста двух словах вашу конфигурацию среды разработки.

      Спасибо

       
      • Yauheni Akhotnikau

        Прошу прощения за задержку с ответом, был загружен работой.

        Я попробовал скомпилировать пример sample/hello_world через проект VS2003. Для этого создал проект sample.hello_world, который разместил непосредственно в каталоге so_4/dev. Использовал уже скомпилированный SObjectizer (в режиме release и в виде DLL). Компилировал свой sample.hello_world в режиме Release.

        Для того, чтобы все прошло нормально, в настройки проекта VS2003 пришлось вносить правки (все могу не упомнить, но основные перечилил ниже). При этом нужно помнить, что пути к заголовочным файлам и библиотекам задаются относительно каталога VS2003 проекта (т.е. относительно so_4/dev/sample.hello_world в моем случае).

        Так же, я удалил из созданного визардом проекта сгенерированные студией *.cpp и *.h файлы. Сам проект создавался как Win32 Console Application.

        Настройки, которые пришлось добавить:
        (Для компилятора)
        * пути к заголовочным файлам: ../;../ace/ACE_Wrappers;
        * runtime-library: Multithreaded DLL;
        * enable RTTI: Yes;
        * precompiled headers: Off;
        (Для линкера)
        * additional library directories: ../lib
        * additional dependecies: ACE.lib so.4.4.0.lib

        В результате при Rebuild-e получается следующий лог компиляции:

        Command Lines
                  Creating temporary file "d:\home\eao197\sandboxes\so_4\tags\4.4.b2\dev\sample.hello_world\Release\RSP000009.rsp" with contents
        [
        /O2 /I "../" /I "../ace/ACE_Wrappers" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /EHsc /MD /GS /GR /Fo"Release/" /Fd"Release/vc70.pdb" /W3 /c /Wp64 /Zi /TP
        \home\eao197\sandboxes\so_4\tags\4.4.b2\dev\sample\hello_world\main.cpp
        ]
        Creating command line "cl.exe @d:\home\eao197\sandboxes\so_4\tags\4.4.b2\dev\sample.hello_world\Release\RSP000009.rsp /nologo"
        Creating temporary file "d:\home\eao197\sandboxes\so_4\tags\4.4.b2\dev\sample.hello_world\Release\RSP00000A.rsp" with contents
        [
        /OUT:"Release/sample.hello_world.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"../lib" /DEBUG /PDB:"Release/sample.hello_world.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /MACHINE:X86 ACE.lib so.4.4.0.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
        .\release\main.obj
        ]
        Creating command line "link.exe @d:\home\eao197\sandboxes\so_4\tags\4.4.b2\dev\sample.hello_world\Release\RSP00000A.rsp"
        Output Window
                  Compiling...
        main.cpp
        Linking...
        Results
                  Build log was saved at "file://d:\home\eao197\sandboxes\so_4\tags\4.4.b2\dev\sample.hello_world\Release\BuildLog.htm"
        sample.hello_world - 0 error(s), 0 warning(s)

        Примечание о дополнительных библиотеках: для примера hello_world достаточно только ACE.lib и so.4.4.0.lib. Для для некоторых других примеров могут потребоваться библиотеки из ObjESSty (oess_defs, oess_io, oess_stdsn). Если же SObjectizer скомпилирован в режиме статических библиотек, то для EXE-шника, скорее всего, всегда придется указывать ObjESSty библиотеки и библиотеку so_zlib.4.4.0.lib (а так же smart_ref.3.1.0.lib).

        Еще по поводу Mxx_ru. В Visual Stidio 6.0, помнится, была возможность привязывать свой инструмент для компиляции проекта. Я это использовал, когда работал с VS6.0 с предыдущей версией mxx (пример можно посмотреть здесь: http://eao197.narod.ru/mxx4/doc/cpptempl.htm#cpptempl_examples_MFC_VisualStudio\). Может быть в VS2003 можно таким же способом поступить, нужно будет поразбираться с VS.

         
    • kais

      kais - 2006-09-19

      Благодарю за неоценимую помошь.
      Всё работает. Именно этого мне и не хватало. Сразу всё видно и понятно.

      P.S. Скажите пожалуйста SObjectizer всегда использует динамическую линковку ACE ?
      Меня всегда смущала компилируемая в статическом режиме библиотеку ACEs.lib, которую я включал в проект при статической линковке библиотек и получал ворох ошибок.

      Ещё раз спасибо!

       
      • Yauheni Akhotnikau

        Рад, что смог помочь.

        По поводу динамической линковке к ACE, то изначально SObjectizer был расчитан именно как динамическая библиотека. И очень важные библиотеки для него, такие как so_sysconf, построены именно за счет использования динамических библиотек. Статическая линковка появилась по просьбам пользователей SObjectizer, которые хотели видеть его в виде статической библиотеки. Так что это совсем новая возможность, еще не обкатаная.

        А линковка статических библиотек она именно этим под Windows и характерна, что тогда в exe-шник нужно тянуть вообще все библиотеки, от которых прямо или косвенно exe-шник зависит. Под Unix-ом библиотеки нужно перечислять как для статической, так и для динамической линковки. Как раз Mxx_ru хорошо все эти зависимости разруливает.

         

Log in to post a comment.