hidden symbol 'crc32' in libmysqlclient.a(crc32.c.o)is referenced by DSO
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hidden symbol 'crc32' in libmysqlclient.a(crc32.c.o)is referenced by DSO相关的知识,希望对你有一定的参考价值。
参考技术A 在执行文件最后链接时报匹配到函数是hhidden 属性,objdump -tT libmysqlclient.a查看符号表编译时确实是hidden 属性,查找是哪个so 使用该函数
发现在librdkafka.so 中会调用crc32();继续去查kafka 编译选项,发现在config 时没改选项 在make 时却去掉了-lz 导致生成的so 会使用crc32函数 但却不知道去链接/usr/lib64/libz.so.1
重新配置kafka configure 和makefile 解决了编译链接问题
-fvisibility=hidden 编译器未通过调试构建
【中文标题】-fvisibility=hidden 编译器未通过调试构建【英文标题】:-fvisibility=hidden not passed by compiler for Debug builds 【发布时间】:2016-06-22 01:14:28 【问题描述】:我正在构建一个启用了GCC_INLINES_ARE_PRIVATE_EXTERN
和GCC_SYMBOLS_PRIVATE_EXTERN
的项目,因为我正在使用预先构建的带有这些标志的静态库。
但是,当我为 Debug 构建我的项目时,-fvisibility=hidden
不包含在编译器标志中,但是当我为 Release 构建我的项目时,它确实包含在内。
我是否需要打开其他标志才能实现这一点?
【问题讨论】:
【参考方案1】:这是旧的,但似乎冲突来自启用可测试性设置。如果您将其关闭,则 -fvisibility=hidden 将正常工作。似乎 Enable Testability 的优先级高于 GCC_SYMBOLS_PRIVATE_EXTERN。
如果您需要该设置,您可以随时根据配置修改设置并混合搭配(即启用可测试性已打开且 OTHER_CFLAGS 包含 -fvisibility=hidden)
【讨论】:
【参考方案2】:看起来像一个 Xcode 错误。我没有找到任何其他解决方案可以显式设置OTHER_CFLAGS
(仅在调试版本中,在同一级别设置GCC_INLINES_ARE_PRIVATE_EXTERN
)来覆盖它:
OTHER_CFLAGS = "-fvisibility=hidden";
【讨论】:
以上是关于hidden symbol 'crc32' in libmysqlclient.a(crc32.c.o)is referenced by DSO的主要内容,如果未能解决你的问题,请参考以下文章
【加分】vc++2005 编译通过,运行出现Loaded 'C:\Windows\System32\ntdll.dll', No symbols loaded.
C++学习(四零四)hidden symbol `atexit‘ in XXX is referenced by DSO