编译调用openssl库出错:d1_enc.c:(text+0x3b):undefined refrence to 'EVP_MD_CTX_md'

在尝试编译一个使用OpenSSL的项目时,遇到了一个错误:d1_enc.c:(text+0x3b):undefined reference to 'EVP_MD_CTX_md'。经过调查发现,这是由于链接时缺少了必要的库。通过修改编译命令,添加了缺失的链接选项,最终成功解决了问题,编译过程顺利完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译命令:

gcc -g -o xxx xxx.c -I/usr/local/ssl/include/ -L/usr/local/ssl/lib/ -lssl

错误:
这里写图片描述

查询原因:

这里写图片描述

修改命令:

usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_profile.c.o): in function `s_profile_file_credentials_provider_ destroy': credentials_provider_profile.c:(.text+0x35): undefined reference to `aws_profile_collection_release' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_profile.c.o): in function `s_profile_file_credentials_provider_ get_credentials_async': credentials_provider_profile.c:(.text+0x8f): undefined reference to `aws_profile_collection_acquire' /usr/bin/ld: credentials_provider_profile.c:(.text+0xa7): undefined reference to `aws_profile_collection_get_profile' /usr/bin/ld: credentials_provider_profile.c:(.text+0x14c): undefined reference to `aws_profile_collection_release' /usr/bin/ld: credentials_provider_profile.c:(.text+0x24d): undefined reference to `aws_profile_collection_new_from_file' /usr/bin/ld: credentials_provider_profile.c:(.text+0x2b2): undefined reference to `aws_profile_collection_new_from_file' /usr/bin/ld: credentials_provider_profile.c:(.text+0x315): undefined reference to `aws_profile_collection_new_from_merge' /usr/bin/ld: credentials_provider_profile.c:(.text+0x320): undefined reference to `aws_profile_collection_release' /usr/bin/ld: credentials_provider_profile.c:(.text+0x328): undefined reference to `aws_profile_collection_release' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_profile.c.o): in function `s_create_sts_based_provider': credentials_provider_profile.c:(.text+0x49b): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_profile.c:(.text+0x4af): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_profile.c:(.text+0x4c1): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_profile.c:(.text+0x501): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0x517): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0x569): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_profile.c:(.text+0x576): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0x5c9): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0x689): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0x7af): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0x7fd): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0x808): undefined reference to `aws_profile_get_name' /usr/bin/ld: credentials_provider_profile.c:(.text+0x869): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0x888): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0xa2d): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0xa62): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_profile.c:(.text+0xae4): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_profile.c.o):credentials_provider_profile.c:(.text+0xb6b): more undefined references to `aws_profile_property_get_value' follow /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_profile.c.o): in function `s_credentials_provider_new_profile_i nternal': credentials_provider_profile.c:(.text+0xbe0): undefined reference to `aws_get_profile_name' /usr/bin/ld: credentials_provider_profile.c:(.text+0xbfe): undefined reference to `aws_profile_collection_acquire' /usr/bin/ld: credentials_provider_profile.c:(.text+0xc31): undefined reference to `aws_profile_collection_get_profile' /usr/bin/ld: credentials_provider_profile.c:(.text+0xc4c): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_profile.c:(.text+0xc60): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_profile.c:(.text+0xc72): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_profile.c:(.text+0xce5): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_profile.c:(.text+0xd7d): undefined reference to `aws_profile_collection_release' /usr/bin/ld: credentials_provider_profile.c:(.text+0xd87): undefined reference to `aws_profile_collection_release' /usr/bin/ld: credentials_provider_profile.c:(.text+0xd90): undefined reference to `aws_profile_collection_release' /usr/bin/ld: credentials_provider_profile.c:(.text+0xe96): undefined reference to `aws_profile_collection_release' /usr/bin/ld: credentials_provider_profile.c:(.text+0xe9d): undefined reference to `aws_profile_collection_release' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_profile.c.o):credentials_provider_profile.c:(.text+0xea4): more undefined references to `aws_profile_collection_release' follow /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_profile.c.o): in function `s_credentials_provider_new_profile_i nternal': credentials_provider_profile.c:(.text+0xee0): undefined reference to `aws_get_credentials_file_path' /usr/bin/ld: credentials_provider_profile.c:(.text+0xefa): undefined reference to `aws_get_config_file_path' /usr/bin/ld: credentials_provider_profile.c:(.text+0xf18): undefined reference to `aws_profile_collection_new_from_file' /usr/bin/ld: credentials_provider_profile.c:(.text+0xf32): undefined reference to `aws_profile_collection_new_from_file' /usr/bin/ld: credentials_provider_profile.c:(.text+0xf50): undefined reference to `aws_profile_collection_new_from_merge' /usr/bin/ld: credentials_provider_profile.c:(.text+0x1107): undefined reference to `aws_profile_collection_acquire' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_sts.c.o): in function `s_resolve_endpoint': credentials_provider_sts.c:(.text+0x177c): undefined reference to `aws_profile_collection_acquire' /usr/bin/ld: credentials_provider_sts.c:(.text+0x1794): undefined reference to `aws_get_profile_name' /usr/bin/ld: credentials_provider_sts.c:(.text+0x17a7): undefined reference to `aws_profile_collection_get_profile' /usr/bin/ld: credentials_provider_sts.c:(.text+0x17d2): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_sts.c:(.text+0x17e2): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_sts.c:(.text+0x184a): undefined reference to `aws_profile_collection_release' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_sts_web_identity.c.o): in function `s_load_profile': credentials_provider_sts_web_identity.c:(.text+0x16ff): undefined reference to `aws_get_config_file_path' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1717): undefined reference to `aws_profile_collection_new_from_file' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x17b6): undefined reference to `aws_profile_collection_destroy' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_sts_web_identity.c.o): in function `aws_credentials_provider_ne w_sts_web_identity': credentials_provider_sts_web_identity.c:(.text+0x19ae): undefined reference to `aws_profile_collection_acquire' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x19bf): undefined reference to `aws_get_profile_name' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x19d1): undefined reference to `aws_profile_collection_get_profile' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1a18): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1a2d): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1a72): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1a87): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1ad1): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1ae8): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1b2f): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1b44): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x1d44): undefined reference to `aws_profile_collection_release' /usr/bin/ld: credentials_provider_sts_web_identity.c:(.text+0x209f): undefined reference to `aws_profile_collection_release' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_utils.c.o): in function `aws_load_profile_collection_from_config_file': credentials_utils.c:(.text+0x9de): undefined reference to `aws_get_config_file_path' /usr/bin/ld: credentials_utils.c:(.text+0x9fa): undefined reference to `aws_profile_collection_new_from_file' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_utils.c.o): in function `s_get_override_endpoint': credentials_utils.c:(.text+0xc39): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_utils.c:(.text+0xc4a): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_utils.c:(.text+0xc5a): undefined reference to `aws_profile_collection_get_section' /usr/bin/ld: credentials_utils.c:(.text+0xc6f): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_utils.c:(.text+0xc86): undefined reference to `aws_profile_property_get_sub_property' /usr/bin/ld: credentials_utils.c:(.text+0xce2): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_utils.c:(.text+0xcf2): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(aws_profile.c.o): in function `aws_credentials_new_from_profile': aws_profile.c:(.text+0x32): undefined reference to `aws_profile_get_property' /usr/bin/ld: aws_profile.c:(.text+0x42): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: aws_profile.c:(.text+0x54): undefined reference to `aws_profile_get_property' /usr/bin/ld: aws_profile.c:(.text+0x65): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: aws_profile.c:(.text+0x89): undefined reference to `aws_profile_get_property' /usr/bin/ld: aws_profile.c:(.text+0x99): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: aws_profile.c:(.text+0xab): undefined reference to `aws_profile_get_property' /usr/bin/ld: aws_profile.c:(.text+0xbb): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: /home/zwy/gitcode/snapShotServer/lib/lib_aws/libaws-c-auth.a(credentials_provider_process.c.o): in function `aws_credentials_provider_new_process ': credentials_provider_process.c:(.text+0x353): undefined reference to `aws_profile_collection_acquire' /usr/bin/ld: credentials_provider_process.c:(.text+0x369): undefined reference to `aws_get_profile_name' /usr/bin/ld: credentials_provider_process.c:(.text+0x389): undefined reference to `aws_profile_collection_get_profile' /usr/bin/ld: credentials_provider_process.c:(.text+0x3c0): undefined reference to `aws_profile_get_property' /usr/bin/ld: credentials_provider_process.c:(.text+0x3cd): undefined reference to `aws_profile_property_get_value' /usr/bin/ld: credentials_provider_process.c:(.text+0x464): undefined reference to `aws_profile_collection_release' /usr/bin/ld: credentials_provider_process.c:(.text+0x5de): undefined reference to `aws_get_config_file_path' /usr/bin/ld: credentials_provider_process.c:(.text+0x5fa): undefined reference to `aws_profile_collection_new_from_file'
06-15
<think>我们面对的是在链接`aws-c-auth`时出现的未定义引用错误,具体涉及三个函数:-`aws_profile_collection_release`-`aws_profile_property_get_value`-`aws_profile_collection_acquire`这些函数属于AWS的配置管理(Profile)功能,通常由`aws-c-auth`的依赖提供。根据AWSSDK的模块化设计,这些函数实际定义在**`aws-c-sdkutils`**中。###错误原因分析1.**依赖关系**:-`aws-c-auth`依赖于`aws-c-sdkutils`(提供配置管理功能)-链接顺序错误导致`aws-c-sdkutils`出现在`aws-c-auth`之后,使得链接器无法解析符号2.**符号解析规则**:-链接器按从左到右的顺序解析符号-如果`aws-c-auth`在`aws-c-sdkutils`之前被链接,则`aws-c-auth`中的未定义符号无法在后续中找到###解决方案####核心原则:调整链接顺序将`aws-c-sdkutils`移动到`aws-c-auth`**之后**(即更靠右的位置):```mermaidgraphLRA[aws-c-auth]-->|需要|B[aws-c-sdkutils]链接顺序:...-laws-c-auth-laws-c-sdkutils...```####具体步骤1.**调整顺序**(以您的原始列表为基础):原顺序:```aws-c-commonaws-checksumss2naws-c-calaws-c-compressionaws-c-ioaws-c-httpaws-c-authaws-c-sdkutils...```修改后:```...aws-c-httpaws-c-authaws-c-sdkutils...#确保aws-c-sdkutils紧接在aws-c-auth之后```完整推荐顺序:```bash-laws-cpp-sdk-s3\-laws-cpp-sdk-core\-laws-crt-cpp\-laws-c-s3\-laws-c-mqtt\-laws-c-event-stream\#关键调整点:将aws-c-sdkutils移到aws-c-auth之后-laws-c-auth\-laws-c-sdkutils\-laws-c-http\-laws-c-io\-laws-c-compression\-laws-c-cal\-ls2n\-laws-checksums\-laws-c-common```2.**验证依赖链**:使用`nm`检查符号定义:```bash#确认aws-c-sdkutils提供缺失符号nm-gClibaws-c-sdkutils.a|grep-E&#39;aws_profile_collection_release|aws_profile_property_get_value|aws_profile_collection_acquire&#39;```预期输出应包含`T`(已定义)的符号,例如:```0000000000000000Taws_profile_collection_acquire0000000000000000Taws_profile_collection_release0000000000000000Taws_profile_property_get_value```###CMake配置修正如果使用CMake,调整`target_link_libraries`顺序:```cmaketarget_link_libraries(your_targetPRIVATE#...其他aws-c-authaws-c-sdkutils#确保在aws-c-auth之后aws-c-http#...剩余)```###根本原因-`aws-c-sdkutils`提供AWS配置文件和SDK工具函数-`aws-c-auth`(认证模块)在初始化时需要加载配置文件,因此依赖这些函数-AWS官方文档强调:[`aws-c-sdkutils`必须出现在`aws-c-auth`的依赖链中](https://github.com/awslabs/aws-c-auth/blob/main/README.md#dependencies)[^1]###附加检查1.**版本兼容性**:-确保所有使用相同版本的AWSSDK(例如v0.6.22)-不兼容版本可能导致符号名称变化2.**系统依赖**:-确认OpenSSL和libcurl已正确安装-缺失系统可能引发间接错误§§相关问题§§1.如何诊断AWSSDK中的未定义符号错误?2.在大型项目中如何管理AWSSDK的版本兼容性?3.如何为AWSSDK的静态链接优化编译选项?</think>根据您的错误信息,问题核心在于 `aws-c-auth` 链接时出现的未定义引用,这些符号实际定义在 `aws-c-sdkutils` 中。以下是系统性的解决方案: ### 错误原因分析 ```mermaid graph TD A[aws-c-auth] -->|依赖| B[aws-c-sdkutils] B -->|定义| C[aws_profile_* 符号] ``` 1. **符号来源**: `aws_profile_collection_release`, `aws_profile_property_get_value`, `aws_profile_collection_acquire` 等符号定义在 **`aws-c-sdkutils`** 中 2. **依赖方向**: `aws-c-auth` 依赖 `aws-c-sdkutils`,但链接顺序中 `aws-c-sdkutils` 出现在 `aws-c-auth` **之后** 3. **链接规则**: 链接器从左向右解析符号,被依赖必须出现在依赖它的的**右边** ### 解决方案 #### 步骤 1:调整链接顺序 **原顺序**: `aws-c-auth aws-c-sdkutils` ❌(错误:依赖在右边) **修正后顺序**: `aws-c-sdkutils aws-c-auth` ✅(正确:依赖在左边) ```bash # 完整修正后的链接顺序(GCC/Clang) g++ your_app.cpp \ -laws-cpp-sdk-s3 \ -laws-cpp-sdk-core \ -laws-crt-cpp \ -laws-c-s3 \ -laws-c-mqtt \ -laws-c-event-stream \ # 关键调整点 ▼ -laws-c-sdkutils \ # 依赖在前 -laws-c-auth \ # 使用符号的在后 # 继续其他-laws-c-http \ -laws-c-io \ -laws-c-compression \ -laws-c-cal \ -ls2n \ -laws-checksums \ -laws-c-common \ -lcurl -lssl -lcrypto -lz -lpthread ``` #### 步骤 2:CMake 配置修正 ```cmake target_link_libraries(your_target PRIVATE # ... 其他 aws-c-sdkutils # 必须在 aws-c-auth 之前 aws-c-auth # ... 其他 ) ``` #### 步骤 3:验证符号定义 ```bash # 检查符号是否在 aws-c-sdkutils 中定义 nm -gC libaws-c-sdkutils.a | grep -E &#39;aws_profile_collection_release|aws_profile_property_get_value|aws_profile_collection_acquire&#39; # 预期输出(T 表示已定义): 0000000000000ac0 T aws_profile_collection_acquire 0000000000000b20 T aws_profile_collection_release 0000000000000c10 T aws_profile_property_get_value ``` ### 根本原因说明 1. **依赖关系**: `aws-c-auth` 的认证功能依赖 `aws-c-sdkutils` 的配置管理模块(Profile 系统)[^1] 2. **符号位置**: Profile 相关函数实现在 `aws-c-sdkutils` 的 [source/profile.c](https://github.com/awslabs/aws-c-sdkutils/blob/main/source/profile.c)3. **链接规则**: 数学表达为: 设 $L_a$(aws-c-auth)依赖 $L_s$(aws-c-sdkutils) 则链接顺序需满足:$L_s$ 的位置索引 < $L_a$ 的位置索引 ### 预防措施 1. **依赖可视化**: ```bash # 生成依赖图 aws-sdk-cpp-dependencies.svg ``` 2. **编译检查**: ```cmake include(CheckFunctionExists) check_function_exists(aws_profile_collection_acquire HAVE_PROFILE_SYMBOLS) if(NOT HAVE_PROFILE_SYMBOLS) message(FATAL_ERROR "Missing aws-c-sdkutils symbols") endif() ``` > 官方参考:[AWS C Auth 依赖文档](https://github.com/awslabs/aws-c-auth#dependencies)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值