我正在构建一个python扩展库,不幸的是,我不得不使用不同版本的静态库(libtiff),为了避免绑定冲突,我将对不同版本静态库的所有调用分隔在不同的共享“so”库中。x1c 0d1x
我使用fvisibility“hidden”标志编译“so”库,以隐藏静态库版本的实现。不幸的是,它不起作用。我的进程崩溃,因为A.so调用了C(2). a中的一些函数。我尝试设置env变量LD_BIND_NOW以减少惰性绑定效果。它没有帮助。
我使用的是CentOS-7,cmake,gccv. 10.2.1,ldv. 2.35-5.el7.4有什么方法可以隔离静态库吗?如有任何意见,我们将不胜感激。
它在Windows上运行完美。在OSX和最新版本的Ubuntu上看起来还可以。不幸的是,我必须用基于CentOS-7的“ManyLinux”Linux构建库,才能在不同的Linux平台上分发我的Python库。
1条答案
按热度按时间hts6caw31#
我以为将库的fvisibility标志设置为hidden不仅会隐藏库类/函数,还会隐藏子库的类/函数。这是错误的。该标志对子库没有影响。它们对链接器仍然可见。幸运的是,有一个标志只隐藏子库API。在CMake文件中,看起来是这样的