Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связывание нескольких .cpp компилятором, Хранение функций во внешнем файле 
V
    Опции темы
xvr
Дата 22.1.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(MAKCim @ 21.1.2008,  21:48)
xvr, 
гы
ты бы лучше сначала проверил, чем сразу утверждать  smile

Обычно я утверждаю то, что знаю  smile 
BCB 6.0
u2.cpp
Код

//---------------------------------------------------------------------------

#pragma hdrstop

#include "U2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)

int func1() {return 1;}
int func0() {return 0;}

U1.cpp
Код

//---------------------------------------------------------------------------

#pragma hdrstop

#include "u2.h"

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        return func0();
}
//---------------------------------------------------------------------------

Ассемблер (выдержка) для U2.cpp:
Код

_TEXT    segment dword public use32 'CODE'
@func1$qv    segment virtual
@@func1$qv    proc    near
?live16385@0:
 ;    
 ;    int func1() {return 1;}
 ;    
    push ebp
    mov ebp,esp
@1:
    mov eax,1
@3:
@2:
    pop ebp
    ret 
@@func1$qv    endp
@func1$qv    ends
_TEXT    ends
_TEXT    segment dword public use32 'CODE'
@func0$qv    segment virtual
@@func0$qv    proc    near
?live16386@0:
 ;    
 ;    int func0() {return 0;}
 ;    
    push ebp
    mov ebp,esp
@4:
    xor eax,eax
@6:
@5:
    pop ebp
    ret 
@@func0$qv    endp
@func0$qv    ends
_TEXT    ends

Обратите внимание на директиву @func0$qv    segment virtual
Результат - функции func1 в выходном exe'нике нет, желающие могут убедится лично (см атач)

Что касается gcc - то он тоже делает отдельные сегменты и выкидывает ненужные, но только если его попросить:
g++ -fdata-sections -ffunction-sections -Wl,--gc-sections
qq.cc
Код

int func0() {return 0;}
int func1() {return 1;}

qq.s
Код

    .file    "qq.cc"
    .section    .text$_Z5func0v,"x"
    .align 2
.globl __Z5func0v
    .def    __Z5func0v;    .scl    2;    .type    32;    .endef
__Z5func0v:
    pushl    %ebp
    movl    %esp, %ebp
    movl    $0, %eax
    popl    %ebp
    ret
    .section    .text$_Z5func1v,"x"
    .align 2
.globl __Z5func1v
    .def    __Z5func1v;    .scl    2;    .type    32;    .endef
__Z5func1v:
    pushl    %ebp
    movl    %esp, %ebp
    movl    $1, %eax
    popl    %ebp
    ret

К сожалению мне не удалось заставить ld под cygwin'ом обработать --gc-sections, вероятно слишком древняя версия gcc (3.4.4), если будет желание - могу попробовать на работе, там вроде есть 4.х


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  p2.rar 5,65 Kb
PM MAIL   Вверх
MAKCim
Дата 22.1.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



xvr, 
да, с LD я оказался не прав
признаю свою ошибку
не сопоставил --gc-sections LD с -ffunction-sections GCC
вместе они дают нужный результат
держи заслуженный плюс, а я  smile

Добавлено через 2 минуты и 51 секунду
archimed7592, 
тебе тоже плюс за остаивание позиции  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.