Re[2]: Вопрос по GCC.
От: ursus_a Россия  
Дата: 22.03.12 13:47
Оценка:
_>>Нужно сделать вот что. Под Линухом имеется некоторая программа, которая компилится под GCC с использованием make — исходники на C/C++, заголовки .H. Компилится она в модуль .o, а затем в исполняемый ELF. нужно вставить в некоторые места КАЖДОГО исходного файла

Z>т.е. куча .c/cpp/cc файлов компилится в один (!) объектник?


uu> нет, объектников тоже несколько, а исполняемый файл один.


_>> вызов некоторой процедуры небольшого объема, но так, чтобы изо всей программы (независимо от того, из какого исходного файла какая ее часть сделана) происходили обращения к одному и тому же куску кода. Для этого используется маленький заголовок и маленький объектник (пробовали любые виды — и .o, и .so, и .a).


Z>маленький заголовок в студию! а какой еще "объектник"?? исходников процедуры небольшого объема нету чтоли???


uu>


#ifndef LabSensor3__
#define LabSensor3__

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

static FILE *F1=0;

extern char * LabSensor3(char *SS, unsigned int ids, unsigned int idp);

#endif

_>>Что же делает компилятор? На этапе компиляции всё гладко, а вот на этапе линковки (то есть gcc -o) теряется адрес вызываемой той самой маленькой процедуры. В исходнике заголовок процедуры ЖЕЛАТЕЛЬНО прицепить как #include<...> соответствующий файл заголовка нужно поместить туда, где лежат stdio.h, conio.h и прочие файлы .h, которые (он туда и помещен) прицепляются к тексту как #include<>.

Z>добавь путь к маленькому заголовку в -I

uu> пробовал. сейчас еще попробую тупо привязать к проекту хэдер и саму библиотеку.


_>>Вопрос: куда при этом надо класть объектный(е) файл(ы) библиотеки?

Z>баз разницы. путь всегда можно указать при линковке -L например или явно указывая маленький объектник (с полным путем)

_>>Пробовал класть туда, где лежит libstd, пробовал класть в отдельную папку и прописывать каталог при компиляции, пробовал класть в текущий каталог. Ни то ни то ни это не помогает. Как правильно.


Z>так вот точно НЕ ПРАВИЛЬНО -- файлы своего проекта не нужно класть к системным (установленным package managerом)


uu> почему? что не так? Если не правильно только стилистически, а в принципе работать будет — значит (в данном случае) прокатит, поскольку условия совсем стендовые и пойдут любые, даже очень некрасивые варианты.


_>>Программа должна компилиться в исполняемый файл.


_>>И еще одна тонкость: есть ли разница в такой линковке, если программа использует Qt и если не использует?


Z>нет. с какого перепуга?


uu> просто в мейке есть директивы около gcc, которые указывают на то, что используется Qt. Поэтому и спросил. Нет — и слава Богу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.