【问题标题】:What is the difference between -shared and -bundle gcc flags-shared 和 -bundle gcc 标志有什么区别
【发布时间】:2012-12-11 10:51:22
【问题描述】:

我有一个名为 abc 的小型 C 程序,它在内部使用 dlopen 来动态加载和运行共享库 libabc。 libabc 声明了一个在运行时动态加载和调用的函数 greeting。当我使用以下两种方法编译和运行时,结果是一样的。创建共享对象 (.so) C 库时,GCC 编译器上的 -shared 和 -bundle 标志有什么区别?

方法一

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"

方法二

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"

使用达尔文 gcc 4.2

【问题讨论】:

  • -bundle 选项是达尔文特有的。

标签: gcc compiler-construction darwin


【解决方案1】:

如果你不使用-bundle,生成的共享对象在你dlopen()之后不能再用dlclose()卸载;它将在整个过程的生命周期中保留在内存中。 -bundle 生成 MH_BUNDLE 类型的文件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 2012-05-15
    • 1970-01-01
    • 2012-07-18
    • 2014-05-21
    • 1970-01-01
    • 2016-04-14
    • 2011-06-05
    相关资源
    最近更新 更多