Информация об изменениях

Сообщение Re[7]: static lib. force linkage от 26.03.2015 19:46

Изменено 26.03.2015 19:53 zaufi

Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, zaufi, Вы писали:


Z>>именно так и сделано тут!

Z>>все регистрируемые классы находятся в отдельной единице трансляции, которая и составляет библиотеку.
Z>>в исполняемом модуле ничего этого не видно, ни процедуры регистрации, ни даже типов регистрируемых классов!

BZ>у тебя main явно вызывавет функцию, определённую в библиотеке:


BZ>main()

BZ>#ifdef COMPILE_AS_STATIC
BZ> test::access_registry_indirectly_mt();

BZ>благодаря этому цепляется obj-файл, в котором она определена. если таких obj-файлов много, то придётся вызывать функцию в каждом из них


ок. разделил библиотеку на 2 файла (объектника): код регистрации и доступ к реестру.

BZ>ps: и извини, неужели ты не можешь сделать пример на 10-20 строчек и собрать его явно без смаке?

извини, как ты себе представляешь код на 10-20 строчек, при том, что участвует 2 единицы трансляции (для формирования библиотеки) + 1 header (для того, чтобы main знал про реестр) + собственно код исполняемого файла, пытающийся использовать указанную библиотеку...

BZ>думаешь охота разбираться в километрах кода и логов? boost, вот это всё. ведь очень просто:


я могу написать на `make` -- CMake просто для того, чтобы на убогих платформах можно было сгенерить файл проекта для самой лучшей IDE в мире...

BZ>lib.c: int a=printf("lib.c\n");

BZ>main.c: main(){}

BZ>слинкуй lib.c как obj/lib файл и ты увидишь разницу. а дальше пробуй конструкторы и т.д.


ну а я что делаю??? static_xtors_lib.cc и static_xtors_lib_access.cc транслируются в .o, и далее из них собирается библа (.a, или .lib, по вашему) -- в чем я должен увидеть разницу?
линковка объектников напрямую к исполняемому файлу, очевидно работает. я сделал (кроссплатформенную) демку (не потратив на это кучу времени, спасибо CMake) показывающую, что в случае со статическими и тем более динамическими библами тоже все работает... какие еще остались вопросы?
Re[7]: static lib. force linkage
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, zaufi, Вы писали:


Z>>именно так и сделано тут!

Z>>все регистрируемые классы находятся в отдельной единице трансляции, которая и составляет библиотеку.
Z>>в исполняемом модуле ничего этого не видно, ни процедуры регистрации, ни даже типов регистрируемых классов!

BZ>у тебя main явно вызывавет функцию, определённую в библиотеке:


BZ>main()

BZ>#ifdef COMPILE_AS_STATIC
BZ> test::access_registry_indirectly_mt();

BZ>благодаря этому цепляется obj-файл, в котором она определена. если таких obj-файлов много, то придётся вызывать функцию в каждом из них


ок. разделил библиотеку на 2 файла (объектника): код регистрации и доступ к реестру (в main'a используюется функция только из этой единицы трансляции!).

BZ>ps: и извини, неужели ты не можешь сделать пример на 10-20 строчек и собрать его явно без смаке?

извини, как ты себе представляешь код на 10-20 строчек, при том, что участвует 2 единицы трансляции (для формирования библиотеки) + 1 header (для того, чтобы main знал про реестр) + собственно код исполняемого файла, пытающийся использовать указанную библиотеку...

BZ>думаешь охота разбираться в километрах кода и логов? boost, вот это всё. ведь очень просто:


я могу написать на `make` -- CMake просто для того, чтобы на убогих платформах можно было сгенерить файл проекта для самой лучшей IDE в мире...

BZ>lib.c: int a=printf("lib.c\n");

BZ>main.c: main(){}

BZ>слинкуй lib.c как obj/lib файл и ты увидишь разницу. а дальше пробуй конструкторы и т.д.


ну а я что делаю??? static_xtors_lib.cc и static_xtors_lib_access.cc транслируются в .o, и далее из них собирается библа (.a, или .lib, по вашему) -- в чем я должен увидеть разницу?
линковка объектников напрямую к исполняемому файлу, очевидно работает. я сделал (кроссплатформенную) демку (не потратив на это кучу времени, спасибо CMake) показывающую, что в случае со статическими и тем более динамическими библами тоже все работает... какие еще остались вопросы?