-shared和-bundle gcc标志有什么区别

时间:2012-12-11 10:51:22

标签: gcc compiler-construction darwin

我有一个名为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

1 个答案:

答案 0 :(得分:3)

如果不使用-bundle,则在执行dlopen()之后,无法使用dlclose()再次卸载生成的共享对象;它将在整个生命周期中留在记忆中。 -bundle生成MH_BUNDLE类型的文件。

顺便说一下,捆绑包的推荐(但不是强制性)扩展名是.bundle,而不是.so