Как подружить C/C++ и Pascal

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
bw

Сообщение bw »

Кто как собирает проекты из исходников написанных на разных языках?
Я помогаю одним товарищам, пишущих на C/C++ под nix/win. Но так как мои познания C/C++ недостаточны, да и язык мне откровенно не нравится, что бы не быть "слабым звеном" я принялся писать на fp. Первые эксперементы под win32 весьма успешны (хотя там кодя 4 строчки :-), под nix еще не проверялось.
На данном этапе я пишу некий загрузчик ресурсов, если любопытно. Исходник, с {$mode objfpc} (а оно нужно) компилируется нормально. Дальше компилируются Си'шный код, а вот когда все это .o собираются, оказывается что нет RTTI__SYSTEM_PCHAR. Потребность этой заразы возникла когда я описал на Pascal'е структуру (record) с полем типа PChar. Ладно. Я сделал свой PChar = ^Char (правда теперь hint выскакивает, мол шалю я с переопределением). Теперь все работает. Но чую я что что-то делаю не так. Видимо проект мне нужно собирать с RTL от FP? Как? system.o? 152Kb? Ненравится мне это, да и неполучилось с первого раза. Как вариант, можно делать динамические библиотеки, хотя не хотелось бы. Кстати как еще сделать что бы .ppu на свет не появлялся? Мне он не нужен.
Зарание спасибо.

..bw
bondlab
незнакомец
Сообщения: 6
Зарегистрирован: 08.11.2005 12:10:07

Сообщение bondlab »

а в чем вопрос?
Аватара пользователя
STAKANOV
энтузиаст
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение STAKANOV »

Видимо проект мне нужно собирать с RTL от FP

ага

если FPC основной, то собираеншь все им, а код написанный на Си прицепляешь во время сборки, это из раздела "использование внешних библиотек" документации.

если ты пишешь вспомогательные модули, то
Я сделал свой PChar = ^Char

это те жертвы которые придется принести ;)

правда теперь hint выскакивает, мол шалю я с переопределением

а ты пути к RTL убери из файла конфигруации ;)
Guest

Сообщение Guest »

bondlab
а в чем вопрос?
> Видимо проект мне нужно собирать с RTL от FP? Как? system.o? 152Kb?
> Кто как собирает проекты из исходников написанных на разных языках?
> Кстати как еще сделать что бы .ppu на свет не появлялся?

STAKANOV
использование внешних библиотек
Это получилось. С этим проблем нет. Но собирается все от gcc...
это те жертвы которые придется принести
Не хочу я :-). Ну не хочу я идти на жертвы. Почему никогда не обходится без жертв.
а ты пути к RTL убери из файла конфигруации
Любопытно. Попробую.

..bw
Аватара пользователя
STAKANOV
энтузиаст
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение STAKANOV »

Не хочу я :-). Ну не хочу я идти на жертвы. Почему никогда не обходится без жертв

Мы тут немного поковырялись в потрохах - <a href='http://freepascal.ru/forum/index.php?showtopic=453' target='_blank'>http://freepascal.ru/forum/index.php?showtopic=453</a>

а можно еще писать на GPC тогда вообще пробем с GCC не возникнет :rolleyes:
bw

Сообщение bw »

Установил fp2, теперь символы формируются совсем не так и при окончательной линковке описанные в сишном хедере процедуры (.h) не находятся. Символы fpc создает из имени модуля и, собственно, процедуры.
Как с ним дальше бороться? Как сделать что бы fpc делал такие же символы как и gcc?

..bw
PVOzerski
постоялец
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб
Контактная информация:

Сообщение PVOzerski »

procedure MyProg(x: longint);stdcall;[public, alias:'_MyProg@4'];
begin

end;
bw

Сообщение bw »

PVOzerski, спасибо. Хм. Квадратные скобки, public, я о таком не слышал. Полистать guide что ли.

А с таким кто-нибудь сталкивался:
> libpsystem.a(system0s748.o)(.text+0x68):system.pp: undefined reference to `asm_exit'
> libpsystem.a(system0s443.o)(.text+0xa):system.pp: undefined reference to `INITFINAL'
Это при линковке, разумеется.

Чего то мне эта фигня начинает надоедать. Попробую, пожалуй, динамически подключать свой код. Т.е. ".dll'ками".

..bw
Аватара пользователя
STAKANOV
энтузиаст
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение STAKANOV »

Как сделать что бы fpc делал такие же символы как и gcc?

как и было показано используя alias:'нужное имя';

Полистать guide что ли.

да, если ничего не помогло, то остается лишь прочитать инструкцию :D :D :D

А с таким кто-нибудь сталкивался:
> libpsystem.a(system0s748.o)(.text+0x68):system.pp: undefined reference to `asm_exit'

я не сталкивался, но это точно определено в инициализирующем коде fpc для win32 (.../rtl/win32/gprt.as)

Попробую, пожалуй, динамически подключать свой код. Т.е. ".dll'ками".

в случае если без RTL нельзя, то пожалуй это единственное решение ;)
Аватара пользователя
noch
постоялец
Сообщения: 145
Зарегистрирован: 07.06.2005 09:45:49
Откуда: Armenia
Контактная информация:

Сообщение noch »

А все-таки почему не gpc?
Там же легче линковать с g++
Конечно, мне freepascal ближе но исходя из твоей задачи gpc снимает массу проблем ;)

gpc=gnu pascal compiler, это frontend к gcc, код генерирует gcc ;)

Он несколько совместим с borland pascal диалектом и совместим с iso pascal ;)


По моему для тебя идеально подходит ;)
bw

Сообщение bw »

Не знаком с gpc. Где его кстати найти можно. Что-то типа gnu-pascal.de? Насколько я понял язык довольно беден. Посмотрим.

..bw
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

Еще такой вопрос.
FP'шные интерфейсы под linux будут работать? Это те которые IUnknown и пр. Собственно не интересуют ни COM, ни DCOM, а интересует возможность использования интерфейсов внутри программы. Насколько я знаю это решается исключительно компилятором и от внешней среды (win/nix) исполнения не зависит.

..bw
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

FP'шные интерфейсы под linux будут работать?

Прекрасно работают
Двадцать бакинских

Сообщение Двадцать бакинских »

Ада!
Ответить