Re: Вопрос по GCC.
От: zaufi Земля  
Дата: 22.03.12 12:44
Оценка:
Здравствуйте, 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 и если не использует?


нет. с какого перепуга?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.