如何在MacOS上将dylib静态链接到我的程序?

时间:2019-06-15 05:58:07

标签: c macos gcc dylib darwin

我的c程序调用:

hLibrary = dlopen(“ libPCBUSB.dylib”,RTLD_LAZY);

,并且在调用gcc main.c后运行可执行文件时,目录中似乎需要此文件。

即我运行./a.out,只要dylib在该目录中,它就可以正常工作。

为了生成带有静态内置的dylib的可执行文件,我一直在尝试各种链接选项,但是失败了。

编译我的c程序(在macOS Darwin而非Linux中)以包含此lib以便最终用户在Mac上不需要它的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

动态库(.dylib)无法静态链接。如果您有权访问用于构建库的源代码,则可以将其转换为静态库,并在您的应用程序中将其静态链接。如果这是仅第三方的二进制库,则需要向供应商索要该库的静态版本,如果该库不可用,则需要坚持动态链接。

请注意,dlopen()并不是链接到dylib的唯一方法,您也可以使用-l,那么您就不必弄乱dlsym()等到入口点。无论哪种方式,都需要将库与您的应用程序一起交付。