LINUX.ORG.RU

Написать хедер для ассемблерной статической либы

 , ,


0

1

У меня есть статическая либа BigLib для работы с длинной арифметикой, написанная на ассемблере. Я хочу использовать ее в проекте на си. Как написать для нее хедер, чтобы можно было использовать функции из этой либы? Вот пример деклараций в biglib.inc:

_BigCreate		proto	:dword				; dtValue
_BigDestroy		proto	:dword				; pBig
_BigCopy		proto	:dword,:dword			; pBig1,pBig2
_BigCompare		proto	:dword,:dword			; pBig1,pBig2
_BigCompare32		proto	:dword,:dword			; pBig,dtValue

Я пишу нечто такое:

#ifndef BIGLIB_H
#define BIGLIB_H

typedef unsigned long DWORD;

extern DWORD _BigCreate(DWORD initValue);

#endif

Но компилятор ругается на то, что Unresolved external symbol '__BigCreate'. В настройках линкера я подключил эту библиотеку. Что может быть не так?

компилятор ругается

не компилятор, а линкер. в ассемблере надо объявить функции глобальными, чтобы линкер их видел.

anonymous
()
Ответ на: комментарий от anonymous

В коде изменил _BigCreate на BigCreate, не помогло.

в ассемблере надо объявить функции глобальными

То есть без перекомпиляции этой либы ничего нельзя сделать?

ZeroMemory
() автор топика
Ответ на: комментарий от ZeroMemory

я бы сначала проверил объектник или либу objdump'ом (или что у тебя там). компилятору явно про статическую линковку сообщаешь?

anonymous
()
Ответ на: комментарий от Harald

У меня нет исходников либы. Взял ее не экселабе. Когда заворачиваю декларации в extern «C», PellesC ругается, а студия подчеркивает красным и выдает ошибку «string».

#ifndef BIGLIB_H
#define BIGLIB_H

extern "C"
{

typedef unsigned long DWORD;

DWORD BigCreate(DWORD initValue);

}

#endif

ZeroMemory
() автор топика
Ответ на: комментарий от ZeroMemory

extern «C» - это для С++ кода, С компилятор такое не знает

Harald ★★★★★
()
Ответ на: комментарий от ZeroMemory

перекомпиляции этой [ассемблерной] либы

Лол, дизассамблируй, объяви глобальные символы в нужных местах и ассамбилуй обратно.

Deleted
()

У меня есть статическая либа BigLib для работы с длинной арифметикой, написанная на ассемблере.

У меня нет исходников либы

Эмм... а чем она лучше опенсорсной GMP? Или тут под «длинной арифметикой» подразумевается нечто иное?

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.