有什么区别
我有一个名为abc的小型C程序,它内部使用dlopen动态加载和运行共享库libabc。 libabc声明了一个在运行时被动态加载和调用的函数问候语。 当我使用以下两种方法进行编译和运行时,结果的工作原理是一样的。 创建共享对象(.so)C库时,GCC编译器上的-shared和-bundle标志有什么区别?
方法1
cc -c libabc.c -o libabc.o
cc **-shared** -o libabc.so libabc.o
cc -Wall -g abc.c -ldl -o abc
./abc ./libabc.so greeting "Hello World"
方法2
cc -c libabc.c -o libabc.o
cc **-bundle** -o libabc.so libabc.o
cc -Wall -g abc.c -ldl -o abc
./abc ./libabc.so greeting "Hello World"
使用Darwin gcc 4.2
如果你不使用-bundle
,那么你在dlopen()之后不能使用dlclose()再次卸载生成的共享对象; 它会留在整个生命周期的记忆中。 -bundle
生成MH_BUNDLE类型的文件。
顺便说一下,建议(但不是强制性)的捆绑扩展是.bundle
,而不是.so
。