LINUX.ORG.RU

линковка *:c files under VC against *.a


0

0

приветствую.

стоит следующая задача: если часть исходников, которые нужно пересобрать под нативные win32. код собирается, всё пучком, но при линковке не находит часть вызовов. исходники этих вызовов предоставлять клиент не хочет, всё, что сумел отдать *.а либы (собраны то ли под линём, то ли под цигвином).

вопрос: можно ли линковать с *.а файлами как и с *.lib файлами? т.е. тупо изменить расширения и всё?

ПС попробовать могу только поздно вечером, хотелось узнать это вообще реально или что-то путаю.


>>т.е. тупо изменить расширения и всё?

.a - это простой ar архив из объектников, .lib - это вообще не библиотека. В .lib просто указывается [по каким смещениям] лежат какие функции в .dll-ке.

>>то ли под цигвином)

в этом случае попробуй распаковать и слинковать вместе со всеми остальными объектниками.

>>то ли под линём

Ну, а если под linux, то я не знаю =)

alex_custov ★★★★★
()

скормить .a cl'у не удасться, тк формат файлов разный.

как вариант можно собрать все .a в одну библиотеку, потом из этой либы получить .lib и с ним слинковаться.

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

спасибо за подсказку. буду поработать.

а на счёт либ файла не совсем согласен. есть же ДЛЛ (динамически загружаемая библиотека) - примерно что и СО (разделяемый объект), а если ЛИБ файл, для статической линковки (как *.а файлы в линуксе). или я совсем ничего не понимаю?

т.е. я могу сделать file1.o + file2.o + file3.o -> files.a в линуксе

file1.obj + file2.obj + file3.obj -> files.lib

затем files.a -> files.so или files.lib -> files.dll

и при линковке моего приложения

myapp.o + files.a (static) -> a.out (statically linked)

myapp.o + files.a (SO description) + files.so -> a.out (using files.so)

и в виндовс:

myapp.obj + files.lib -> myapp.exe (static)

myapp.obj + files.lib (dll description) -> myapp.exe (using DLL)

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

>>а на счёт либ файла не совсем согласен. есть же ДЛЛ (динамически загружаемая библиотека) - примерно что и СО (разделяемый объект), а если ЛИБ файл, для статической линковки (как *.а файлы в линуксе). или я совсем ничего не понимаю?

.lib не всегда статическая библиотека. Она может быть таковой, но вовсе не обязательно. Ты сам посмотри - user32.lib, wsock32.lib и прочая шняга с которой компилится проект - это не статические либы, а ссылочные (см выше, я описывал).

>>myapp.o + files.a (SO description)

такого не бывает

http://tldp.org/HOWTO/Program-Library-HOWTO/static-libraries.html

Я уже говорил, .a - это обычный архив. распаковывется с помощью ar x. Попробуй вынуть из него объектники и прилинковать с своему проекту. Правда не факт что пойдёт

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

хотя ты знаешь, я сейчас глянул - у .lib и у .a файлов оказывается одинаковый заголовок !<arch>. Вполне возможно, что .a можно переименовать в .lib и это сработает :)

alex_custov ★★★★★
()

Можно скормить. В .a файлах должны лежать либо С либо Fortran объектники (С++ не съест, ибо ABI другой). Еще надо выдрать из дистрибутива с mingw либы libgcc.a, libmingw32.a, libmingwex.a, libg2c.a (если используется Fortran).

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

> Можно скормить.

спасибо за информацию и советы отвечавшим. да, там только С функции должны быть, возможно фортран, главное, что нет С++.

либы выдерну.

gunja
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.