Позвольте мне сначала установить контекст, это CERN ROOT и CINT и ACLiC и т. д.
Предположим, у меня есть основной macro
с именем macro.cpp
и два заголовка h1.cpp
(содержит определение функции) и h1.h
, содержащие объявление функции, определенной в h1.cpp
, аналогично у меня есть h2.cpp
и h2.h
. Основная программа macro.cpp
вызывает эти функции внутри h1
и h2
. Мне удалось скомпилировать исходные файлы, используя:
root [0] .L h1.cpp+
root [1] .L h2.cpp+
root [2] .L macro.cpp+
который сгенерировал три файла .so
macro_cpp.so
, h1_cpp.so
и h2_cpp.so
. Я хочу знать, что с ними делать? Как мне link
их так, чтобы у меня было что-то вроде "macro.out
" или что-то в этом роде (один файл executable
какого-то вида), который я могу выполнить (хотя я не знаю, как!) и добиться всего, чего я хотел достичь с помощью макрос.
Примечание. Если я просто загружу все файлы, используя .L file_name.cpp
и т. д., и просто выполню основной макрос, используя .x macro.cpp
, тогда все будет работать нормально, и у меня будут результаты, но это не то, что мне нужно! Я хочу скомпилировать как мы в обычном g++
и кстати на каждом форуме все советуют компилировать с помощью .L file_name.cpp+
или ++
.. Очень хотелось бы узнать всю историю. Потому что кроме .L file_name.cpp+
никто ничего не объясняет... что дальше? Что делать с .so
и т.д.
Я новичок, я буду очень признателен за простой и пошаговый ответ и объяснение.
Спасибо.
Edit-1: я работаю с:
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Редактировать-2: Информация, связанная с ROOT: ROOT 5.34/36 (v5-34-36@v5-34-36, 07 декабря 2016 г., 23:31:51 на linuxx8664gcc ) Интерпретатор CINT/ROOT C/C++, версия 5.18.00, 2 июля 2010 г.
.L macro.cpp+
вы можете выполнять функции, которые определены в этом файле, например.L macro.cpp+; macro(3.1415);
. сохраненный.so
будет прочитан при следующем выполнении.L macro.cpp+
(без перекомпиляции уже скомпилированных макросов). или вы можете просто загрузить ранее скомпилированные файлы.so
с помощьюgSystem->Load("macro_C.so");
. - person pseyfert   schedule 05.01.2017