Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Mac OSX中加载和卸载共享库

在Mac OSX中加载和卸载共享库
EN

Stack Overflow用户
提问于 2012-10-17 14:12:59
回答 1查看 3K关注 0票数 5

如果这个问题以前在这个论坛上被重复了,我很抱歉。我有一个问题,在那里,加载和卸载dylibs不是如预期的Mac(特别是卸载部分)。问题是,如果我有一个可执行文件,如果我加载了一个共享库,比如A.dylib,然后使用加载的共享库来加载一个库,比如B.dylib。当我稍后尝试卸载库B.dylib时,没有返回错误代码(返回的int值是0-因为我使用常规的dlopen和dlclose函数来加载和卸载库,0表示卸载成功),但是当我检查以确保使用活动监视器或b.dylib的lsof仍然在内存中时。

现在我们正在为windows,linux和mac移植这段代码。Windows和Linux运行正常,但只有mac给我带来了问题。

我在mac developer库中阅读,发现:“有几种情况下,动态库永远不会被卸载: 1)主要的可执行链接指向它,2)不支持卸载的API (例如NSAddImage())被用来加载它或其他依赖于它的动态库,3)动态库在dyld的共享缓存中。”

在我的案例中,前两个案例中的任何一个我都没有。我在case3上怀疑。

我的问题是: 1.我可以做什么来确保我有案例3? 2.如果是,如何修复它? 3.如果不是,如何修复它? 4.为什么mac如此不同?

在这方面的任何帮助都是非常感谢的!

谢谢,Jan

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-15 18:22:54

将共享库加载到可执行文件中时,该库导出的所有符号都是解析该可执行文件所需符号的候选符号,如果DYLD链接器绑定到意外符号,则会导致该库保持加载状态。您可以使用nm列出共享库中的符号,还可以设置环境变量以启用动态链接器的调试输出(请参阅dyld上的this手册页)。您需要设置DYLD_PRINT_BINDINGS环境变量。

最有可能的是,您需要将导出的符号限制为可执行文件使用的特定子集,以便只绑定您打算使用的那些符号。这可以通过将所需的符号放在文件中并通过-exported_symbols_list选项将其传递给链接器来完成。如果不这样做,您可能最终会在unload库中绑定一个符号,并且它不会被卸载,因为它们需要解析可执行文件中的符号,并且在调用dlclose()时不会卸载。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12936327

复制
相关文章
在Mac OSX下安装和使用GO语言
Go语言是Google新推出的结合了动态语言和静态语言优势的一个新兴的语言。下面介绍一下如何在Mac系统下安装和使用这个语言。
EltonZheng
2021/01/26
1.5K0
Mac OSX安装MongoDB
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。与此同时,它也为开发人员 提供了传统数据库的功能:二级索引,完整的查询系统以及严格一致性等等。 MongoDB能够使企业更加具有敏捷性和可扩展性,各种规模的企业都可以通过使用MongoDB来创建新的应用,提高与客户之间的工作效率,加快产品上市时间,以及降低企业成本。
xiangzhihong
2022/11/30
8790
Oracle数据加载和卸载
  若是少量数据;可选择的解决方案有很多。常用的用 Pl/SQL developer工具,或者手动转换为 INSERT 语句,或者通过API。但数据量大;用上面的方法效率太烂了。本文来说说 Oracle 数据的加载和卸载。
星哥玩云
2022/08/18
7740
Mac OSX 安装 MongoDB
MongoDB是由C++语言编写,开源而且基于分布式文件存储的介于关系数据库和非关系数据库之间的产品;在高负载的情况下,通过添加更多节点保证服务器性能;旨在为WEB应用提供可扩展的高性能数据存储解决方案;以文档的形式存储数据,数据结构由键值对(key / value); 其文档类似 JSON 对象,字段值可以包含其他文档、数组以及文档数组。
xiangzhihong
2022/12/21
7570
Mac OSX 安装 MongoDB
WordPress主题Mac osX 2.03
在Mac osX2.02基础上,修正了一些BUG,添加了滑动门按钮,主题2.03a和2.03b左侧日志改为通栏,2.03c和2.03d为分栏,首页显示摘要和显示全文共四个版本。建议下载使用新版!经测试,发现独立页面模板下面的动态导航与部分插件有冲突,目前发现与Lightbox和Clean Archives Reloaded两个插件有冲突,如果发现动态导航没有正常显示或提示有错误,可禁用插件试一下。感谢网友aunsen的测试。
星哥玩云
2022/06/11
9400
详解共享库的动态加载
这边文章不是一个如何引导,尽管它确实展示了如何编译和调试共享库和可执行文件。为了解动态加载的内部工作方式进行了优化。写这篇文章是为了消除我在该主题上的知识欠缺,以便成为一名更好的程序员。我希望它也能帮助您变得更好。
后场技术
2021/05/18
3.3K0
详解共享库的动态加载
Mac OSX 平台安装 MongoDB
安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
OwenZhang
2021/12/08
8100
Mac OSX 平台安装 MongoDB
Install Scrapy on OSX|mac OSX 上安装Scrapy[SYN:gejoin.com]
顺利的话,一句命令搞定: sudo pip install Scrapy OSX还是需要额外一些包或升级的,包括:
gigiwangs
2019/03/01
8200
Mac OSX 上安装yarn
如果从来没改过这个.bash_profile文件(可能会提示你“已锁定”),你可能需要先把这个文件的内容复制到另一个txt(其它类型)文件中,之后:
全栈程序员站长
2022/09/01
1.6K0
Mac OSX 上安装yarn
WordPress主题Mac osX 2.02
这是一款仿Mac osx外观的Wordpress杂志型主题。首页可以添加自定义图片并显示日志摘要,主题包含两套主页面模板。通过主流浏览器测试。独立页面模板下面仿Mac osx的动态dock导航,由于IE6不支持透明PNG图片,而采用GIF图片,效果差了些。
星哥玩云
2022/06/11
1.2K0
WordPress主题Mac osX 2.02
ImageMagick and JMagick install on Mac OSX
接的遗留代码,在本地运行,有jmagick-6.4.0.jar 但是出现错误: javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class magick.ImageInfo main里新建一个ImageInfo 则出现错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: no JMagick in java.libr
架构师刀哥
2018/03/20
1.8K0
Mac OSX网络诊断命令
下面是一些Mac OSX下常用的网络诊断命令。它们能帮助我们发现网络问题。文中提到的协议和网络通信原理,可参考协议森林。 有些工具,如arping, arp-scan,需要借助HomeBrew安装。 基本工具 网络诊断的第一步,是了解自己的设备,比如有哪些接口,IP地址都是什么。 ifconfig 显示网络接口(interface)信息。如接口名称,接口类型,接口的IP地址,硬件的MAC地址等。 ARP ARP协议用在局域网(LAN)内部。借用ARP协议,设备可以知道同一局域网内的IP-MAC对应关系。当我
Vamei
2018/01/18
2.2K0
在OSX上安装和使用ROS
参考链接:https://github.com/mikepurvis/ros-install-osx
zhangrelay
2022/04/29
1K0
在OSX上安装和使用ROS
jd-gui-osx-1.4.0 在Mac下闪退
4.由于本地是java10的环境,尝试更改jd-gui-osx-1.4.0的info.plist对应的java版本 不管用,经验证需要java1.8的环境
编程那点事
2023/02/25
9030
打开Mac OSX原生的NTFS功能
很多同学都会为如何在Mac下写入NTFS格式的磁盘而感到困惑,因为默认情况下,把一个NTFS格式的磁盘插入到Mac里,是只能读不能写的。用起来肯定很郁闷,很多同学也因此把移动硬盘分成了双分区,一个NTFS,一个HFS。其实在Mac下完全是可以写NTFS磁盘的
twelvecoder
2021/12/24
1.3K0
Mac 上安装和卸载Java JDK
brew方法现在已经不能安装了.oracle的官网现在也下载不了(java8),提示你登录, 注册了账号, 搞半天登录不了. 老老实实的用百度云下载吧. 以下是下载地址,java8 for mac ,拿去不谢. 这里下载安装包:jdk-8u201-macosx-x64 .dmg
chuchur
2022/10/25
6770
mac go环境的安装和卸载
背景: go环境的安装和卸载, 之前安装过go1.12, 现在项目需要,要安装go1.13. 所以要做的是先卸载, 然后在安装
用户7798898
2020/09/27
9.6K0
mac go环境的安装和卸载
mac卸载mysql
sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My* edit /etc/hostconfig and remove the line MYSQLCOM=-YES- rm -rf ~/Library/PreferencePanes/My* sudo rm -rf /Library/Rec
hankleo
2020/09/17
2.9K0
MAC卸载python
官网介绍:https://docs.python.org/3/using/mac.html#getting-and-installing-macpython
week
2018/08/24
1.1K0
在ctypes的C共享库中调用Python函数
ctypes 是Python标准库中提供的外部函数库,可以用来在Python中调用动态链接库或者共享库中的函数,比如将使用大量循环的代码写在C语言中来进行提速,因为Python代码循环实在是太慢了。大致流程是通过 ctypes 来调用C函数,先将Python类型的对象转换为C的类型,在C函数中做完计算,返回结果到Python中。这个过程相对是比较容易的。
王云峰
2023/10/23
7850

相似问题

在Mac OSX 10.5中卸载pysvn

10

从Mac OSX和windows卸载Maven

21

在Mac OSX上卸载和删除Metasploit框架

00

卸载ctype加载的共享库中的共享库

11

如何在MAC OSX上交叉编译zlib和共享库?

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档