aliyun / aliyun-oss-cpp-sdk

Aliyun OSS SDK for C++
Other
184 stars 88 forks source link

VS2019链接OSS动态库报错LINK2019,无法解析的外部符号 #180

Closed Yao-DY closed 2 months ago

Yao-DY commented 2 months ago

OSS编译选项:BUILD_SHARED_LIBS=false, ENABLE_RTTI=false 得到动态库后,在另一个解决方案中链接时报错LINK2019,无法解析的外部符号(尝试过使用绝对路径链接,问题依旧)。

以下是CMaklist中声明OSS的方法 set(AliyunOSS_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" CACHE INTERNAL "AliyunOSS_INCLUDE_DIR") set(AliyunOSS_LIBS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib" CACHE INTERNAL "AliyunOSS_LIBS_DIR") set(AliyunOSS_LIBS "${CMAKE_CURRENT_SOURCE_DIR}/lib/alibabacloud-oss-cpp-sdk.lib" CACHE INTERNAL "AliyunOSS_LIBS") add_custom_target(AliyunOSS ALL COMMENT "This is a dummy target to include AliyunOSS in the solution" )

以下是使用OSS的CMakeList: SET(CMAKE_CXX_STANDARD 17) SET(CMAKE_CXX_STANDARD_REQUIRED TRUE) SET(CMAKE_INCLUDE_CURRENT_DIR ON) INCLUDE_DIRECTORIES(${AliyunOSS_INCLUDE_DIR}) LINK_DIRECTORIES(${AliyunOSS_LIBS_DIR}) ADD_LIBRARY( ${PROJECT_NAME} ${${PROJECT_NAME}_HEADS} ${${PROJECT_NAME}_SRCS} ${${PROJECT_NAME}_MOCS} ) TARGET_LINK_LIBRARIES( ${PROJECT_NAME} PRIVATE optimized ${AliyunOSS_LIBS} )

以下是VS2019的报错 错误 LNK2019 无法解析的外部符号 EVP_MD_CTX_init,函数 "class std::basic_string<char,struct std::char_traits,class std::allocator > __cdecl AlibabaCloud::OSS::ComputeContentETag(class std::basic_istream<char,struct std::char_traits > &)" (?ComputeContentETag@OSS@AlibabaCloud@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAV?$basic_istream@DU?$char_traits@D@std@@@4@@Z) 中引用了该符号 前略\build\App\alibabacloud-oss-cpp-sdk.lib(Utils.obj)

Yao-DY commented 2 months ago

我找到原因了,编译输出的动态库是不包含Open SSL的,而链接alibabacloud-oss-cpp-sdk.lib时又需要链接OpenSSL,导致报错无法解析的外部符号。解决方案就是将third_party里的OpenSSL也添加到附加依赖库