Я не совсем понял вопрос.
Если вы хотите узнать, какие опции выставляет mxx_ru когда компилирует SObjectizer, то запустите mxx_ru с ключем --mxx-cpp-extract-options:
То же самое нужно проделать и в случае, когда хотите, чтобы SObjectizer компилировался в виде статической библиотеки. Только предварительно нужно создать в каталоге рядом с build.rb файл .so4.static
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Заранее прошу прощения, но опять повторюсь.
Никак не могу довести до ума копиляцию 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, кажется, что очень неудобно будет/
Евгений, опишите пожалуйста двух словах вашу конфигурацию среды разработки.
Спасибо
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Прошу прощения за задержку с ответом, был загружен работой.
Я попробовал скомпилировать пример 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 получается следующий лог компиляции:
Примечание о дополнительных библиотеках: для примера 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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Благодарю за неоценимую помошь.
Всё работает. Именно этого мне и не хватало. Сразу всё видно и понятно.
P.S. Скажите пожалуйста SObjectizer всегда использует динамическую линковку ACE ?
Меня всегда смущала компилируемая в статическом режиме библиотеку ACEs.lib, которую я включал в проект при статической линковке библиотек и получал ворох ошибок.
Ещё раз спасибо!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
По поводу динамической линковке к ACE, то изначально SObjectizer был расчитан именно как динамическая библиотека. И очень важные библиотеки для него, такие как so_sysconf, построены именно за счет использования динамических библиотек. Статическая линковка появилась по просьбам пользователей SObjectizer, которые хотели видеть его в виде статической библиотеки. Так что это совсем новая возможность, еще не обкатаная.
А линковка статических библиотек она именно этим под Windows и характерна, что тогда в exe-шник нужно тянуть вообще все библиотеки, от которых прямо или косвенно exe-шник зависит. Под Unix-ом библиотеки нужно перечислять как для статической, так и для динамической линковки. Как раз Mxx_ru хорошо все эти зависимости разруливает.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Хотелось бы знать настройки компилятора и линкера для проектов, и
спользующих SObjectizer в виде статических и динамических библиотек.
Найти настройки в проектных файлах Mxx_Ru примеров я не смог.
Спсибо
Я не совсем понял вопрос.
Если вы хотите узнать, какие опции выставляет 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
Спасибо Евгений.
Очень помогло. Не подумал даже использовать данную команду для примеров и тестов.
Правда есть ещё пара спорных моментов и проблем с компиляцией.
Но надеюсь, что чтение инструкций мне поможет.
Нет проблем. Если будут вопросы -- спрашивайте, не стесняйтесь.
Пользуясь случаем задам вопрос в офтопик: а почему бы не начать использовать mxx_ru для проектов вместе с SObjectizer? Есть какие-то препятствия?
Заранее прошу прощения, но опять повторюсь.
Никак не могу довести до ума копиляцию 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, кажется, что очень неудобно будет/
Евгений, опишите пожалуйста двух словах вашу конфигурацию среды разработки.
Спасибо
Прошу прощения за задержку с ответом, был загружен работой.
Я попробовал скомпилировать пример 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.
Благодарю за неоценимую помошь.
Всё работает. Именно этого мне и не хватало. Сразу всё видно и понятно.
P.S. Скажите пожалуйста SObjectizer всегда использует динамическую линковку ACE ?
Меня всегда смущала компилируемая в статическом режиме библиотеку ACEs.lib, которую я включал в проект при статической линковке библиотек и получал ворох ошибок.
Ещё раз спасибо!
Рад, что смог помочь.
По поводу динамической линковке к ACE, то изначально SObjectizer был расчитан именно как динамическая библиотека. И очень важные библиотеки для него, такие как so_sysconf, построены именно за счет использования динамических библиотек. Статическая линковка появилась по просьбам пользователей SObjectizer, которые хотели видеть его в виде статической библиотеки. Так что это совсем новая возможность, еще не обкатаная.
А линковка статических библиотек она именно этим под Windows и характерна, что тогда в exe-шник нужно тянуть вообще все библиотеки, от которых прямо или косвенно exe-шник зависит. Под Unix-ом библиотеки нужно перечислять как для статической, так и для динамической линковки. Как раз Mxx_ru хорошо все эти зависимости разруливает.