2011-01-10 3 views
11

Я знаю, что в Windows вы бы сделали что-то вроде LoadLibrary, а затем установите указатель на функцию с GetProcAddress,Загрузка библиотеки динамически в Linux или OSX?

Но как можно было бы сделать подобное в Linux или OSX? Причина в том, что я хочу разработать подключаемую систему для своего приложения X-платформы.

Благодаря

ответ

10

Вы можете использовать dlopen, а друзья на Linux и Mac OS X (this Mac man page должны работать для обоих). Обратите внимание, однако, что вам нужно быть осторожным, чтобы не смешивать 32-битный и 64-битный код и библиотеки; на Mac, просто убедитесь, что библиотеки являются «универсальными двоичными файлами».

+0

Вы комментируете «универсальные бинарные файлы» применительно к Linux и Mac? Возможно, стоит уточнить. –

+0

Насколько я знаю, в Linux нет общедоступной жирной двоичной схемы - все же («универсальный двоичный» - это термин Apple для толстого двоичного кода). См. Http://en.wikipedia.org/wiki/Fat_binary#FatELF:_Universal_Binaries_for_Linux – EmeryBerger

+0

@ Давид - это пренебрежительное письмо Ульриха Дреппера (удивление!) Делает маловероятным, что Linux будет поддерживать живые двоичные файлы до тех пор, пока ад не замерзнет ... http : //www.redhat.com/archives/fedora-devel-list/2009-October/msg01118.html – EmeryBerger

5

В Linux вы используете dlopen() (открытая библиотека), dlsym() (смотреть символ (= функцию или значение, как правило)) и друзья: http://linux.die.net/man/3/dlopen

Я слышал это работает так же, как и в OS X, но у меня нет опыта с этим.

2

Эквиваленты POSIX: dlopen и dlsym. Я знаю, что у них есть Linux, и я был бы удивлен, если OS X этого не сделает.

Смежные вопросы