gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:14:42 24 4
gpt4 key购买 nike

我有一个名为 abc 的微型 C 程序,它在内部使用 dlopen 来动态加载和运行共享库 libabc。 libabc 声明了一个在运行时动态加载和调用的函数问候语。当我使用以下两种方法编译和运行时,结果是一样的。创建共享对象 (.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"

使用 Darwin gcc 4.2

最佳答案

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

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

关于gcc - -shared 和 -bundle gcc 标志有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13818699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com