我有一个作为第三方应用程序(app.exe)的一部分运行的solaris共享对象(common.so文件)。我无法访问应用程序的源代码。为此,我需要添加一个发布http请求的功能。我的计划是在openssl中使用libcurl。棘手的部分是app.exe已经依赖于旧版本的curl(7.14),它不支持tls v1.2的ssl。使用同一个库的多个版本时的符号分辨率
我下载了源代码并构建了curl(7.55.1)和openssl.a文件。我也能够建立common.so静态依赖这些档案文件。 ldd不显示对curl或ssl .so文件的依赖性,也不会报告任何“找不到符号”错误。
有了这个结果,我期待我的curl版本被调用,当它作为应用程序的一部分运行,但它没有。相反curl_version()显示旧版本,我得到错误未知的ssl协议错误
我正在使用solaris studio编译器。应用程序不直接依赖于curl库,而是依赖于一个不同的.so文件,该文件导出与curl具有相同名称的符号。我意识到从nm,我假设这个.so文件也链接静态卷曲。
你说你没有访问应用程序的源代码。但是,你至少可以重新编译或者编辑二进制文件以依赖更新的'libcurl'吗?这是什么平台? –
这是在solaris SunOS版本5.10上。我无法重建或编辑二进制文件。我可以使用外部工具(如objcopy)并在外部修改共享对象的符号,但这可能会产生一些意想不到的后果。 –