小编kam*_*gin的帖子

处理libc ++和旧libstdc ++之间ABI差异的好方法是什么?

什么(如果有的话)是处理Mac上libc ++和stdlibc ++之间ABI不一致的好方法?

问题:许多c ++ 11特性需要C++标准库的新libc ++实现.但是libc ++与旧的libstdc ++不是ABI兼容的,而目前大多数软件通常都与后者相关联.例如,系统编译器仍然使用stdlibc ++,这意味着我用macports安装的所有库对于像字符串这样的std类都有不同的ABI,并且对于大量使用c ++ 11的项目是不可链接的.

我当前的解决方案:保留两个版本的库,这通常会导致问题(boost,opencv等)并链接到相应的.

我想有人可能会建议,如果我真的想要使用libc ++,我应该使用stdlibc ++清除我的系统,并确保macports(或其他任何地方)的任何内容只与libc ++链接.你可以看到这个任务看起来多么令人生畏.

有没有人找到一个很好的方式来解决我们生活在这个"stdlib-limbo"之间的问题?:)

编辑:我更明确地提出了一个隐含的后续问题:Apple将libc ++和libstdc ++与他们的系统一起发布.假设有人攻击了潜在的问题并尝试转换到libc ++ - 仅.从libstdc ++切换到libc ++的推荐方法是什么,因为系统上当前安装的100%库(一些随系统一起提供,大多数通过macport,一些通过手动编译)链接到libstdc ++(如果有的话) )?有没有人这样做并活了下来?

c++ macos macports c++11

16
推荐指数
1
解决办法
3294
查看次数

OSX中动态链接优先级之间的冲突?

OSX上的不同libjpeg动态库之间存在动态链接冲突.首先是标准的原生libJPEG.dylib(在/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/中).但是,如果您使用的是MacPorts,则还可以在/ opt/local/lib中使用与端口相关的libjpeg.dylib.例如,后者可以作为某些其他端口的依赖项安装.

当您链接到系统libJPEG(这是首选)时,这会产生问题.然后,如果/opt/local/lib在DYLD_LIBRARY_PATH中,则在搜索动态库时将优先考虑该路径,从而在加载符号时导致运行时错误:

dyld: Symbol not found: __cg_jpeg_resync_to_restart
 Referenced from:
/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
 Expected in: /opt/local/lib/libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Trace/BPT trap: 5
Run Code Online (Sandbox Code Playgroud)

所以我有两个问题(可能相关):

  1. 什么是解决实际问题的好方法(/opt/local/libDYLD_LIBRARY_PATH显然解决它但从而为其他依赖创建问题)?

  2. 搜索动态库的其他路径(即指定的"/ System/Library"路径在哪里)以及为什么DYLD_LIBRARY_PATH的优先级更高?

c++ macos macports dylib

14
推荐指数
4
解决办法
2万
查看次数

Clang在静态链接期间删除死代码(gcc相当于-Wl, - gc-sections)

我正在链接静态库,我想知道如何处理llvm/Clang中的死代码剥离.我找不到任何提示Clang有一些等效的-Wl, - gc-section或-dead_strip的文档.

我假设在更高的优化级别自动执行一些死代码消除,但gcc也是如此,对吧?然而,gcc通过上面提到的标志提供了一些明确的控制.Clang没有提供,或者我错过了什么?

(系统是OSX)

macos clang static-linking

5
推荐指数
1
解决办法
5101
查看次数

标签 统计

macos ×3

c++ ×2

macports ×2

c++11 ×1

clang ×1

dylib ×1

static-linking ×1