Сейчас на форуме: bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Вопрос по Си программированию
<< . 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение


Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 28 ноября 2010 23:54 · Поправил: PE_Kill
· Личное сообщение · #1

Хех мои жалкие потуги. Буду тут флудить. Пытаюсь накодить функцию. Функция на вход получает контекст и данные, после чего распихивает эти данные в контекст. Собственно цель оптимизировать весь код эту и другие функции по размеру. Компилятор в релизе вырезает нахрен функцию и втыкает ее код прямо в основной код, как будто это макрос. Собственно вопрос, как ему сказать что мне это не нравится, но при этом оставить оптимизацию по размеру?

-----
Yann Tiersen best and do not fuck




Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 10 декабря 2010 03:00
· Личное сообщение · #2

PE_Kill,Vamit,neomant,OKOB,NikolayD
отлично!!! всё работает спасибо!!!



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 15 декабря 2010 14:30
· Личное сообщение · #3

решил написать свой короткий вопрос здесь, не создавая "лишней" темы. MFC 6. В release по умолчанию ехе'шник линкуется winspool.drv, мне спулер не нужен, тк в проекте я не пользуюсь принтером. Да и вообще в отладчике бряк на никогда не срабатывает. Хочу избавиться от мертвого груза и говорю линкеру чтоб он ее исключил, в ответ он ругается на унресолвед символы в какой-то мфцшной библиотеке. Как избавиться от них ?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 15 декабря 2010 15:23
· Личное сообщение · #4

ELF_7719116 пишет:
Как избавиться от них ?

Не использовать MFC или компилить с MFC в длл.

-----
Следуй за белым кроликом





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 15 декабря 2010 15:32
· Личное сообщение · #5

Ага, Delphi тоже за мс линкером гонится, та же фигня. Нахрена они стали пихать эту длл непонятно.

-----
Yann Tiersen best and do not fuck




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 15 декабря 2010 17:01 · Поправил: ELF_7719116
· Личное сообщение · #6

ну не выдирать же из мфц либл эти symbols ?там их три всего. повозился немного, пока безрезультатно.
neomant
Длл никак не получиться уже

---
5 минут спустя:
Уважаемые коллеги, задача решена! Беру ольку 2. Открываю как бинарник NAFXCW.LIB. В конце нее по порядку с zero байтом идут символьные функции на линковку. Из всего списка отношение к winspool.lib имеют только три(_OpenPrinter@24,_ClosePrinter@4,_DocumentProperties). Беру бинарным поиском ищу последовательность 00??...??00 , количество "??" < strlen("_OpenPrinter@24") и оказывается есть символьная ссылка с меньшей длинной, заменяю все три спулеровские ею, хвосты зануляю. Компилится и работает без ошибок! И БЕЗ winspool.drv(lib). В ехе'шнике осталось всего 8 длл'ок




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 06:40
· Личное сообщение · #7

Компилю код в OBJ на выходе этот самый OBJ содержит external вызовы _aullrem, _aulldiv, _allmul. Компилятор их втыкает в места, где код обрабатывает 64 битные данные. Как заставить компилятор проинлайнить эти функции в OBJ?

-----
Yann Tiersen best and do not fuck





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 07:09
· Личное сообщение · #8

они не инлайнятся
но если очень хочется
найди их в SRC/CRT
и включи себе в проект, не инлайн, но будут уже в obj




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 07:24
· Личное сообщение · #9

Это асм файлы, как их включить в проект?

crt\src\intel\ullrem.asm

-----
Yann Tiersen best and do not fuck





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 07:37
· Личное сообщение · #10

ну я ж не знаю под чем ты там
в студии добавь себе в проекте там где .c .cpp файлы
или если cl работаешь то просто в makefile свой доплюсуй




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 07:52
· Личное сообщение · #11

Если эти асм файлы проинклудить то cl почти на каждую строчку ругается

-----
Yann Tiersen best and do not fuck





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 08:03
· Личное сообщение · #12

ночь улица фонарь аптека..
ах ну да
так ты в студии или в cl ?
.obj себе в проект возьми, из уже собраных в том же SRC/, должно забрать все _a*
или подключи libc*.lib нужную
поидеи тоже должно вытянуть нужные функции автоматом




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 08:21
· Личное сообщение · #13

Что то запутался. Я компилю *.c файл с помощью cl.exe из комплекта VisualStudio 2010. На выходе получается *.obj. Как мне сделать так, чтобы вышеупомянутые функции были именно в этом obj файле, линковать что ли? Я ламо в Си, если можно то короткий пример.

-----
Yann Tiersen best and do not fuck





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 08:27
· Личное сообщение · #14

в проекте, где у тебя .c файлы
добавь .obj файлы к ним же, (свойства add files , или что то в этом духе)
уже скомпиленые с crt\src\intel\dll_lib\llmul.obj и другие которе тебе надо
после компиляции
твой .obj должен уже содержать те функции

во всяком случае в VC6 это работало




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 08:35
· Личное сообщение · #15

Есть только ASM файлы готовых скомпиленых в OBJ нет. Так же нет файла проекта, есть просто файл с расширением .C он не мой.

-----
Yann Tiersen best and do not fuck





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 08:52
· Личное сообщение · #16

странно еще в 9.0 obj были...
lib.exe можно уже готовые obj вытянуть что бы не компилять с asm

а почему нельзя уже в итоговый проект-программу подлючить твой obj и уже скомпилированые au*ll.obj файлы?
итоговый будет собиратся на в студии?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 09:19
· Личное сообщение · #17

reversecode пишет:
итоговый будет собиратся на в студии?

В том то и дело, что не в студии, поэтому и хочется, чтобы все студийные функции были в этом одном OBJ.

Такс, с помощью lib.exe вытащил все OBJ из libcmt.lib, как их прилинковать к главному OBJ? Что конкретно писать?

-----
Yann Tiersen best and do not fuck





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 10:25
· Личное сообщение · #18

хм, а похоже никак
msdn по этому поводу что то молчит
в функции которые можно принудительно инлайнить или манипулировать _au* не входит

так что включай в итоговый проект где будет линковатся твой obj и другие obj которые ты вытянул
и оно их подключит




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 18 декабря 2010 11:05
· Личное сообщение · #19

Чего-то вы ерундой занимаетесь.
PE_Kill пишет:
Это асм файлы, как их включить в проект?

Асм файлы включаются в проект, как и любые другие файлы *.с, в компиляцию, никуда их инклюдить не нужно. Каждый асм файл, как и *.с файл, породит obj файл, которые затем линкуются в исполняемый модуль. Это же прописные истины...

-----
Everything is relative...





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 11:10
· Личное сообщение · #20

он вроде как не в VS собирает результирующую программу
скорее всего в делфях я так думаю
поэтому хотели собрать один obj который бы заинлайнил операции с _int64
но такого сделать похоже нельзя
поэтому как я сказал выше

может делфя(если это так) asm не скомпилит ms$ овский, поэтому obj он уже вытянул




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 11:14
· Личное сообщение · #21

Да в делфях собираю, но это не важно. Суть получить один OBJ. Почему так нельзя? Ведь свои собственные внутренние функции не разбираются на отдельные OBJ всё в одном, почему же тогда эти же ASM файлы туда нельзя включить?

-----
Yann Tiersen best and do not fuck





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 11:17
· Личное сообщение · #22

хз, нельзя, я не нашел во всяком случае как сгенерить один obj с функциями которые идут от других модулей.
а почему именно один obj? включай все obj с _a*ll.obj и свой этот
будет тоже самое




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 11:24 · Поправил: PE_Kill
· Личное сообщение · #23

Потому что:
1) Я не хочу чтобы была куча файлов, чуждых среде, в которой они собираются
2) А если в external будет 1000 функций, мне что 1000 OBJей потом еще таскать с проектом?

В masm32 при инклудах собирается всё в один OBJ не понимаю, почему в более продвинутой студии с этим такая проблема.

-----
Yann Tiersen best and do not fuck





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 18 декабря 2010 11:28
· Личное сообщение · #24

Если асм файлы являются системными, а не вашими собственными, то проще к проекту подключить соответствующую либу, и будьте уверены, что из неё возьмутся только те объектники, которые нужны для линковки. Выдирать из либы объектники и подключать к проекту не имеет смысла.

-----
Everything is relative...





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 11:30 · Поправил: reversecode
· Личное сообщение · #25

ну неумеет наверное cl этого делать
надо кстати поекпериментировать с gcc, он помоему тоже этого не умеет

можно сделать так
в твой .c вставить _asm вставку твоих функций с .asm файла
но тогда ручками прийдется править
потому что я там смотрел в a*ll.asm инклудятся другие .inc файлы

PE_Kill пишет:
2) А если в external будет 1000 функций, мне что 1000 OBJей потом еще таскать с проектом?

вообще то это собирается в .lib
а делать из сотни .obj один .obj, видимо не серьезно с точки зрения разработчиков компилятора)




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 11:52
· Личное сообщение · #26

reversecode пишет:
а делать из сотни .obj один .obj, видимо не серьезно с точки зрения разработчиков компилятора

Это да, но тут не OBJ а исходники, а это должно собираться в один OBJ.

reversecode пишет:
в твой .c вставить _asm вставку твоих функций с .asm файла

В данном случае можно, но если опять же это большой проект с сотнями функций я задолбаюсь их переносить в один файл, да и это регресс какой то.

-----
Yann Tiersen best and do not fuck




Ранг: 35.0 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 18 декабря 2010 12:06 · Поправил: sniper
· Личное сообщение · #27

PE_Kill
если у тебя один .c файл, то получится один obj. если нужно crt прилинковать, то используй /MT: http://msdn.microsoft.com/ru-ru/library/2kzt1wy3.aspx
не пойму в чём проблема.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 12:10 · Поправил: reversecode
· Личное сообщение · #28

sniper
в том что в итоговый obj оно не линкуется

делаем простой .с
Code:
  1. int test()
  2. {
  3.       _int64 t1, t2;
  4.  
  5.     t1 = t2/100;
  6. }

и теперь нужно скомпилить такой obj файл(не exe!)
который бы заинлайнил в себя __alldiv функцию из CRT

у меня не получилось, мож у кого получится




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 18 декабря 2010 12:16
· Личное сообщение · #29

sniper
Создает определение _MT и указывает компилятору на необходимость размещения имени библиотеки LIBCMT.lib в файле OBJ, чтобы компоновщик использовал библиотеку LIBCMT.lib для разрешения внешних символов.
А мне нужны сами функции в OBJ как сказал reversecode а не имя библиотеки где их брать.

-----
Yann Tiersen best and do not fuck





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 18 декабря 2010 12:28
· Личное сообщение · #30

reversecode пишет:
и теперь нужно скомпилить такой obj файл(не exe!)
который бы заинлайнил в себя __alldiv функцию из CRT

Вопрос, зачем всё пихать в один объектник?
Но, если для каких-то приватных целей это необходимо, то выход здесь только один - объединить все исходники (*.с и асм) в один файл, а затем его откомпилировать.

-----
Everything is relative...





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 декабря 2010 12:39
· Личное сообщение · #31

Vamit
это ты не уменя спрашивай))

а насчет все в один
ну попробуй скомпиль два .c файла в один obj

test.c
Code:
  1. int test()
  2. {
  3.  return 1;
  4. }

run.c
Code:
  1. extern int test();
  2. int run()
  3. {
  4.  return   test();
  5. }


вот точно так же компилятся .c + .asm файлы в один obj


<< . 1 . 2 . 3 . 4 . >>
 eXeL@B —› Программирование —› Вопрос по Си программированию
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати