Здравствуйте, ursus_a, Вы писали:
_>Нужно сделать вот что. Под Линухом имеется некоторая программа, которая компилится под GCC с использованием make — исходники на C/C++, заголовки .H. Компилится она в модуль .o, а затем в исполняемый ELF. нужно вставить в некоторые места КАЖДОГО исходного файла
т.е. куча .c/cpp/cc файлов компилится в один (!) объектник?
_> вызов некоторой процедуры небольшого объема, но так, чтобы изо всей программы (независимо от того, из какого исходного файла какая ее часть сделана) происходили обращения к одному и тому же куску кода. Для этого используется маленький заголовок и маленький объектник (пробовали любые виды — и .o, и .so, и .a).
маленький заголовок в студию! а какой еще "объектник"?? исходников процедуры небольшого объема нету чтоли???
_>Что же делает компилятор? На этапе компиляции всё гладко, а вот на этапе линковки (то есть gcc -o) теряется адрес вызываемой той самой маленькой процедуры. В исходнике заголовок процедуры ЖЕЛАТЕЛЬНО прицепить как #include<...> соответствующий файл заголовка нужно поместить туда, где лежат stdio.h, conio.h и прочие файлы .h, которые (он туда и помещен) прицепляются к тексту как #include<>.
добавь путь к маленькому заголовку в -I
_>Вопрос: куда при этом надо класть объектный(е) файл(ы) библиотеки?
баз разницы. путь всегда можно указать при линковке -L например или явно указывая маленький объектник (с полным путем)
_>Пробовал класть туда, где лежит libstd, пробовал класть в отдельную папку и прописывать каталог при компиляции, пробовал класть в текущий каталог. Ни то ни то ни это не помогает. Как правильно.
так вот точно НЕ ПРАВИЛЬНО -- файлы своего проекта не нужно класть к системным (установленным package managerом)
_>Программа должна компилиться в исполняемый файл.
_>И еще одна тонкость: есть ли разница в такой линковке, если программа использует Qt и если не использует?