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_EXTERNGCC_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.

echart symbol属性都有哪些

CRC32的计算方法

C++学习(四零四)hidden symbol `atexit‘ in XXX is referenced by DSO

crc32 — 计算一个字符串的 crc32 多项式?

CRC32算法笔记