CRobin писал(а):Если в вашем примере вместо 8 будет некая глобальная (в рамках С-модуля) переменная, как тогда должно выглядеть содержимое исходника для С++?
вот пример "с нуля". делаю в линухе, т.к. мингв ставить не хочу, а на маке свои тонкости.
1. написать С++ исходник, называется он my.cpp
- Код: Выделить всё
int global = 8; // глобальная переменная! специально вынес её вне extern "C"
extern "C" {
int sample(int a)
{
return a + global;
}
}
2) нужно скомпилировать исходник, чтобы получить объектный файл.
- Код: Выделить всё
gcc -c my.cpp
использование ключика "-c" критично, иначе он может подумать, что тебе нужно экзе файл или ещё чего-нибудь
Ожидается, что файл скомпилируется без ошибок, и просто появится my.o файл.
3) нужно написать паскаль программу, которая будет его использовать. имя файла test.pas. (в той же директории, где находится my.o)
- Код: Выделить всё
{$l my.o} // линкуем объектный файл
// описываем функцию
function sample(a: integer): integer; cdecl; external;
// программа!
begin
writeln(sample(2));
end.
4) компилируем
- Код: Выделить всё
fpc test.pas
5) запускаем!
- Код: Выделить всё
$ ./test
10
вот и всё!
На что обратить внимание:
1) умолчания компилятора. Не исключено, что по-умолчанию gcc может компилировать под x64, тогда, как нужна i386. И FPC может собирать по-умолчнию под ту же i386. А 64-битный объектный файл с 32-битной программой не сработается

2) зависимости! Если парсер зависит от дополнительных библиотек (например libc, lmath или ещё что-нибудь), то придётся линковать и зависимости тоже! С ними может быть проще, т.к. они могут входить в стандратный набор библиотек и уже находяся в нужном виде (либо .o либо .a). Просто нужно будет скопировать в папку с проектом, либо добавить их папку в пути поиска библиотек
Приведённый выше пример, ни от какой дополнительной библиотеки на зависит, по-этому всё получилось легко и просто
