понедельник, 23 января 2017 г.

#1337. Invalid obj file. Berlin. 64 бита

Делаем с-файл с функцией в которой есть static переменная.

Делаем obj файл в cpp builder 64 бита.

Делаем pas файл. Подключаем к нему получившийся obj.

Компилируем Delphi 64 бита.

Получаем ошибку линковки bad obj file format.

БЕЗ static - всё хорошо. Но нужен static...

Однако сами Embarcadero как-то же собирают crtl в котором есть static. И оно даже как-то линкуется.

Если переменную сделать глобальной, но не static, то получаем ошибку bad symbol.

Рафинированый пример выделять пока некогда.

Если переменную сделать глобальной и extern и инстанцировать её на стороне pas кода, то всё хорошо. Только pas коду совершенно не нужно такое знание кишков c кода.

А если в функции сделать переменную на стеке типа char [16000] то на стороне Delphi требуется определение функции __chkstk. В msdn можно найти её куцее описание.

Комментариев нет:

Отправить комментарий