首页 > 解决方案 > 如何在g ++中链接特定版本的共享库

问题描述

我有以下共享库: 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. 这意味着我所做的链接不会发生。
值得一提的是,错误来自.c文件中包含的.cpp文件。

标签: c++copensslshared-libraries

解决方案


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

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

nm libToCheck.so | grep X509_STORE_CTX_get0_chain

如果没有人定义此符号,则可能您缺少一些要链接的库。如果存在,检查函数的使用范围,它不能对应库中声明的范围。检查名称空间或类似名称。


推荐阅读