CMake编译的C++程序在Bluehost服务器运行时重定位错误求助
GLIBC版本兼容导致C++程序在服务器运行失败的解决方法
问题
在WSL Ubuntu环境下用CMake编译了一款处理CSV文件并输出JSON结果的C++程序,本地运行正常。将程序及ldd列出的相关库(除linux-vdso.so.1外)上传至Bluehost的Cloudlinux 6.10服务器(Linux+PHP后端)后,执行时抛出错误:
./lib/esp_query: relocation error: /lib/libpthread.so.0: symbol __tunable_get_val, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
此前上传的简单HelloWorld程序通过PHP exec()调用可正常运行。
解决步骤
- 匹配目标环境编译:由于服务器为Cloudlinux 6.10,改用CentOS 7环境编译程序——CentOS 7的系统库版本与Cloudlinux 6.10更接近,可避免GLIBC版本不兼容引发的问题。
- 调整代码标准并移除依赖:原项目依赖的
hosseinmoein/DataFrame包要求C11标准,但CentOS 7默认编译器对C11支持有限,因此改用C++98标准重写程序,并移除该第三方依赖。
完成上述调整后,程序在服务器上通过PHP exec()调用可正常运行。
内容的提问来源于stack exchange,提问作者DCD
相关产品推荐
相关产品推荐

