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

 eXeL@B —› Программирование —› Мультиязыковой программинг
Посл.ответ Сообщение


Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 30 марта 2007 15:57
· Личное сообщение · #1

Мне надо собрать программу, один модуль которой написан на ассемблере, а основа - на си.
Знаю, что можно как-то собирать через .obj-файлы, но литературы в инете что-то не могу найти. Ассемблерные вставки не предлагать



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

Создано: 30 марта 2007 16:08
· Личное сообщение · #2

Не знаю как под виндой, но под никсами я так собирал
ld --oformat binary -Ttext 0x00 -o example.me head.o main.o my_meos.o




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 30 марта 2007 16:12
· Личное сообщение · #3

__asm {} ? =) а нет - сделай .lib и прилинкуй..

-----
Тут не могла быть ваша реклама





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 30 марта 2007 16:13 · Поправил: HoBleen
· Личное сообщение · #4

Мне нужно под виндой... Если это важно, то у меня VS 6 + masm 9 с этого сайта.

[added]
Я делаю:
\masm32\bin\ml /c /coff 1.asm
\masm32\bin\lib 1.obj /out:1.lib

Далее добавляю 1.lib в link->library modules. В результате:

123.obj : error LNK2001: unresolved external symbol _Rebuild
Debug/123.exe : fatal error LNK1120: 1 unresolved externals



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 30 марта 2007 17:43
· Личное сообщение · #5

без кода трудно что-то сказать, но тут либо что-то с соглашениями вызова, либо неправильно написан файл заголовков для си, либо в коде что-то накосячил




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 30 марта 2007 17:46
· Личное сообщение · #6

extern "C" void Rebuild();

В коде:
...
Rebuild();
...



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 30 марта 2007 20:07
· Личное сообщение · #7

Av0id пишет:
без кода трудно что-то сказать, но тут либо что-то с соглашениями вызова, либо неправильно написан файл заголовков для си, либо в коде что-то накосячил

+1.
HoBleen, obj открой в блокноте и посмотри как там названы ф-ии. Я в сях не линковал, только в делфях (и из тасма, т.к. борланд плевался на масмовый obj)... так вот, скорее всего надо описать согласно описаниям в obj'е и сам obj должен быть скомпилен с ключем coff.

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 32.9 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 30 марта 2007 22:57
· Личное сообщение · #8

гых, ну вы ветераны даётё даёте.. ртфм Юров ассемблер, msdn -> decorated names, calling conventions )
если лень это всё читать то наверно тебе в асмовом модуле нужно объявить процедуру примерно так:
extern _Rebuild
....
_Rebuild proc near C arg1:dword...

если есть старые архивы зомба он тоже об этом что-то писал кажется
GL ;)




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 31 марта 2007 08:34
· Личное сообщение · #9

Гы-гы, не хватало WINAPI в объявлении, т.к. в .lib он объявлен как _Rebuild@16
Извиняюсь за ламерский вопрос, тема закрыта =Р


 eXeL@B —› Программирование —› Мультиязыковой программинг
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати