【问题标题】:how to link specific version of shared library in g++如何在g ++中链接特定版本的共享库
【发布时间】:2020-10-13 07:10:14
【问题描述】:

我有以下共享库: libssl.so, libssl.so.1.1, libcurl.so, libcurl.so.4, libcurl.so.4.4.0, libcrypto.so, libcrypto.so.1.1.
所有库都在openssl 文件夹中。
我的问题是,如何链接 1.1 版的 libssl?它是自动完成的吗? 我尝试了以下方法:

g++ -c my_file_name.cpp -std=c++11 -w -fpermissive -lpthread --coverage $(INCLUDES) `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0` -O0 -Lopenssl -lcrypto -lcurl -lssl
g++ my_file_name.o -o ex -std=c++11 -w -fpermissive -lpthread --coverage -lgtest -lgtest_main -lpthread `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0` -O0 -Lopenssl -lcrypto -lcurl -lssl

但似乎链接没有发生。因为我仍然收到如下错误: error: ‘X509_STORE_CTX_get0_chain’ was not declared in this scope

稍后编辑
nm libssl.so.1.1 | grep X509_STORE_CTX_get0_chain 生成0000000000218210 T X509_STORE_CTX_get0_chain。这意味着我所做的链接不会发生。
值得一提的是,错误来自.cpp文件中包含的.c文件。

【问题讨论】:

    标签: c++ c openssl shared-libraries


    【解决方案1】:

    可能libssl.so 是指向libssl.so.1.1 等的符号链接等等。 该问题似乎与此函数的这些库之一中缺少的实现有关:X509_STORE_CTX_get0_chain。 现在您必须检查此符号是否在您链接的这些库之一中定义,或者您是否需要链接其他人。

    要检查这一点,您可以对每个库执行以下命令:

    nm libToCheck.so | grep X509_STORE_CTX_get0_chain
    

    如果没有人定义这个符号,可能你错过了一些要链接的库。 如果存在,检查函数的使用范围,它不能对应库中声明的范围。检查命名空间或类似名称。

    【讨论】:

    • nm libssl.so.1.1 | grep X509_STORE_CTX_get0_chain 结果为0000000000218210 T X509_STORE_CTX_get0_chain。这意味着我所做的链接不会发生。还有什么想法吗?
    • 好的,所以函数的使用范围与库中声明的范围不对应。检查命名空间或类似的
    • 这就是情况变得棘手的地方。错误代码来自.c 文件,我已将其包含在.cpp 中,以便执行一些单元测试。
    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多