Проблема с смартлинком

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

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

Сообщение zub » 09.02.2006 13:08:07

Имеется проект win32 OpenGl.
без смартлинка собирается и работает, всё ок.
Cо смартлинком собирается, но при запуске вылетает на первом glGet или glVertex.
Посмотрел секцию импорта в ексешнике, этих функций нет, и вообще из opengl32.dll импортируется всего несколько функций, должно быть гораздо больше.
Не подскажите куда копать?
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Сообщение PVOzerski » 09.02.2006 13:34:54

Если функции импортируются статически, явно задействованы в коде и при этом отсутствуют в экзешнике - похоже на глюк компилятора. Иногда помогали стирание всех промежуточных ассемблерных, объектных, библиотечных, PPU-шных файлов и полная пересборка проекта. Если глюк настоящий, можно попытаться обойти его, запретив смартлинк конкретно для интерфейсного модуля с объявлениями функций OpenGL: {$smartlink off}
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Сообщение zub » 09.02.2006 14:45:13

Да, функции в коде задействованы явно и импортируются статически. все промежуточные файлы стирал и пересобирал непомогает. буду жить без смартлинка, толку от него всеравно мало:(
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Сообщение STAKANOV » 09.02.2006 16:02:56

Не уверен я, что дело в смартлинке. Сие чудо всеголишь вместо одного объектного файла создает несколько, при этом каждая функция в отдельном файле. Далее линкер присоединяет только те объектный файлы которые востребованы (идея стара как мир, применялась еще во времена ms-dos). Т.е. на вызовы функций из dll это вообще не должно влиять. Может дело в опциях оптимизации?

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

Сообщение Guest » 09.02.2006 16:11:03

Опции я не трогал, всё по умолчанию, только добавил -Mdelphi
-Twin32
-l
-OG3p3
-S2ahte
-viewnh
-XsX
-Rintel
-Aas
-Mdelphi
смартлинк включается в тексте программы {$SMARTLINK+}

{$smartlink off} в мдуле описаний функций opengl не помог, в ексешник функции не проходят
Guest
 

Сообщение PVOzerski » 09.02.2006 16:39:03

На самом деле, со смарт-линком дело обстоит чуть хитрее. Действительно, из одного юнита делается набор obj-модулей, но сейчас компилятор в нынешнем его виде (по крайней мере, для win32) прямо, без промежуточных файлов и вызова внешних утилит, генерит статические библиотеки в формате coff (аналогичные тем, что делает утилита ar из объектных файлов). Если в генерации кусков, ответственных за idata-секцию, проявится баг, результат будет, пожалуй, именно как описан в начале ветки.

Кстати, вот идея еще: попробовать пересобрать, используя внешний ассемблер. (ppc386 -s -a, потом запустить созданный батничек). Заодно и asm-код посмотреть будет можно.
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Сообщение STAKANOV » 09.02.2006 17:45:28

-OG3p3

я бы попробовал это убрать

смартлинк включается в тексте программы {$SMARTLINK+}

{$smartlink off} в мдуле описаний функций opengl не помог, в ексешник функции не проходят


лучше сразу -CX в конфиге, а при необходимости отключать в модуле директивой

Кстати, вот идея еще:

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

Сообщение PVOzerski » 09.02.2006 18:08:54

Нет, это будет не вручную: компилятор сделает для каждого юнита каталог с "лапшой" из мелких asm-файлов, последующие манипуляции над которыми будут прописаны в вышеозначенном батнике.
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Сообщение zub » 09.02.2006 21:04:39

Мужики, может глянете если не лень? ;)
<a href='http://zcad.nm.ru/smartlinc.rar' target='_blank'>http://zcad.nm.ru/smartlinc.rar</a>
Оставил только вызов glvertex, понятно что на не инициализированном контексте OpenGL он работать не будет, но хоть в таблицу импорта должен попадать.
Забыл сказать, там модуль opengl.pas разделен на 2, в одном объявлены функции, в другом константы. такчто используется не стандартный модуль
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 70

Рейтинг@Mail.ru