crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в dll на mingw должна импортировать ссылки
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 7.6.2010, 11:24
  ну я так поняла, что опция -rdynamic как раз для разыменования и динамических линков ставится.
ещё там есть опция линкера -soname (-Wl -soname).
надо ковырять, мне пока некогда было углубляться на выходных. может, сегодня поковыряю вечером. линь только дома.
Гурман Дата 7.6.2010, 8:15
 
Цитата(Iron Bug @ 5.6.2010, 1:16) *
вот нарыла вроде решение для gcc:

http://webcache.googleusercontent.com/sear...=clnk&gl=uk

но вот под icc никак не хочет! сообщает, что символ неопределён при попытке вызова функции из основного модуля. хрен поймёшь. но надо ещё опции компилера ковырять.


это же .exe? символ не определен, поскольку все точки разименованы, в .exe не хранятся имена в том же формате, как в .dll, а отладочный формат для этого непригоден (по идее)
Iron Bug Дата 5.6.2010, 0:16
  вот нарыла вроде решение для gcc:

http://webcache.googleusercontent.com/sear...=clnk&gl=uk

но вот под icc никак не хочет! сообщает, что символ неопределён при попытке вызова функции из основного модуля. хрен поймёшь. но надо ещё опции компилера ковырять.
Гурман Дата 4.6.2010, 10:17
  на скорую руку наверно получится только в MSVC
Iron Bug Дата 4.6.2010, 8:55
  у меня вчера под icc "на скорую руку" этот фокус провернуть не вышло: exe-шник никак не соглашается экспортировать функции. сегодня вечером ещё поковыряю, ибо стало интересно :)
Гурман Дата 4.6.2010, 8:31
  я что-то такое где-то встречал, но по-моему на mingw это работает только в win, поскольку форматы бинарников отличаются от lin (например, для использования разделяемых библиотек .so никакие def-файлы совершенно не нужны)

а надо сделать мультпасп... тфу, мультиплатформенно

насчет передать библиотеке точки - с данными я так и сделал, и уже это работает, но данные пришлось собрать в одну кучу, чтобы не передавать слишком много указателей, а вот с функциями хуже, их тьма... пришлось их пока дублировать в dll :( потом надо из них отдельную dll сделать

на досуге попробую первый вариант, но если в lin не заработает, то увы не подходит
Iron Bug Дата 3.6.2010, 20:33
  вот тут (блин, еле нашла такое чудо, но подозревала, что оно есть в природе! :) )

http://2lx.ru/2010/02/vyzov-fiuncii-exe-iz-dll/

посмотри, там есть примеры как экспортировать функции в exe-шниках. может, mingw это схавает (только ему надо подсунуть дефайны в отдельном файле, я так понимаю, вместо dllimport/dllexport). по-моему, как раз твой случай. я лично это не пробовала. но занятный вопрос - стало интересно попробовать :)

а можно, наверное, просто передавать библиотеке набор ссылок на нужные процедуры через какую-то служебную функцию. типа, перед началом работы проводить "инициализацию" библиотеки и явно передавать ей все нужные точки входа.
Гурман Дата 2.6.2010, 13:27
  да, объявлены, как внешние, ругается на этапе сборки .dll, объектный архив .a перед этим собирается

я довольно быстро понял, что прямого выхода нет - загружающее библиотеку приложение уже размещено в памяти, ссылки внутрь него разименованы (если, конечно, нет отладочной информации, но этот случай не рассматривается), поэтому динамический загрузчик не сможет привязать ссылки из библиотеки к точкам входа в приложении

кривой выход видится только один - все, что должно быть доступно библиотеке, оформлять в виде другой библиотеки, к которой производить привязку, и следить, чтобы она загружалась только 1 раз, сразу даже и не видно, как это лучше всего сделать

или я не прав насчет полного разименования ссылок внутрь загружающего приложения?
Iron Bug Дата 2.6.2010, 11:29
  да вроде если они объявлены как внешние, то линкеру на них вообще должно быть пофиг.
он у тебя ругается именно на этапе создания самой библиотеки? как объявлены функции?
Гурман Дата 1.6.2010, 13:48
  dll на mingw экспортирует несколько ссылок и функций, но должна импортировать тоже, чтобы при ее загрузке приложением они были связаны, данные и функции находятся в приложении, код в dll должен получить доступ к статическим данным приложения и к функциям

по умолчанию не получается, компоновщик при создании dll ругается на отсутствующие ссылки, вроде помнится, что есть ключи компоновщика, которые заставляют его делать то, что нужно, установить необходимость динамической связи импортируемых ссылок при загружке, но найти не получается, может их нет у mingw?

если нет, как же быть? есть обходной маневр?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 18:31