Как я могу статически связать dylib с моей программой на macOS? - PullRequest
1 голос
/ 15 июня 2019

моя программа c вызывает:

hLibrary = dlopen ("libPCBUSB.dylib", RTLD_LAZY);

и мне нужен этот файл в каталоге, когда я запускаю исполняемый файл после вызова gcc main.c.

т.е. Я запускаю ./a.out, и все это работает, пока dylib находится в этом каталоге.

Чтобы создать исполняемый файл со статически встроенным dylib, я пробовал всевозможные варианты компоновки, но безуспешно.

Как правильно скомпилировать мою программу на c (в macOS Darwin, а не в linux), чтобы включить эту библиотеку, чтобы конечный пользователь не нуждался в ней на своем Mac?

1 Ответ

0 голосов
/ 16 июня 2019

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

Примечаниечто dlopen() - не единственный способ связать с dylib, вы также можете использовать -l, тогда вам не нужно возиться с dlsym() и т. д., чтобы добраться до точек входа.В любом случае, конечно же, необходимо доставить библиотеку вместе с вашим приложением.

...