c++ - 如何在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
文件。
解决方案
可能libssl.so
是等的符号链接libssl.so.1.1
。问题似乎与此函数的这些库之一中缺少的实现有关:X509_STORE_CTX_get0_chain
。现在您必须检查此符号是否在您链接的这些库之一中定义,或者您是否需要链接其他人。
要检查这一点,您可以对每个库执行以下命令:
nm libToCheck.so | grep X509_STORE_CTX_get0_chain
如果没有人定义此符号,则可能您缺少一些要链接的库。如果存在,检查函数的使用范围,它不能对应库中声明的范围。检查名称空间或类似名称。
推荐阅读
- java - 监听器未听到 NatTable 单元格点击
- javascript - 如何在 React.js 表中显示 MySQL 表?
- javascript - How to find most common number in array using link in JavaScript?
- api - 多个带有 axios 的 api 客户端和 react native
- php - 如何编写 Laravel GroupBy 查询?
- python - error with module multiprocessing under python3.8
- html - I used overlapping on image but the second image didn't show on the RWD(just the first pic have it)
- java - Android JNI 错误:NoSuchMethodError:没有非静态方法
- jenkins - 尝试更新一些旧 Jenkins 作业的配置时出现 ERR_CONNECTION_RESET 错误
- spring-boot - Spring Boot soap client auto retry