开发者社区> 问答> 正文

阿里云C SDK的问题

我用Visual Studio 2010编译了oss c sdk,可以编译通过,用Visual Studio 2010新建了一个C++工程,引用了oss_c_sdk_lib.lib和third_party下的lib,写了个main.cpp文件,编译的时候报下面的错误,这个是什么回事?还有什么别的要设置的吗?求大神指点,谢谢。



main.obj : error LNK2001: 无法解析的外部符号 __imp__apr_pool_create_ex@16
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_pool_create_ex@16
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_thread_mutex_unlock@4
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_file_read@12
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_thread_mutex_lock@4
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_pool_destroy@4
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_file_write@12
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_palloc@8
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_initialize@0
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_thread_mutex_create@12
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_file_open_stderr@8
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_table_make@8
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_strerror@12
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_file_close@4
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_terminate
1>oss_c_sdk_lib.lib(aos_http_io.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_snprintf
1>oss_c_sdk_lib.lib(oss_util.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_psprintf
1>oss_c_sdk_lib.lib(oss_util.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_table_get@8
1>oss_c_sdk_lib.lib(oss_util.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_table_set@12
1>oss_c_sdk_lib.lib(aos_log.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_time_exp_lt@12
1>oss_c_sdk_lib.lib(aos_log.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_time_now@0
1>oss_c_sdk_lib.lib(aos_log.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_os_thread_current@0
1>oss_c_sdk_lib.lib(aos_buf.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_file_seek@12
1>oss_c_sdk_lib.lib(aos_buf.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_file_info_get@12
1>oss_c_sdk_lib.lib(aos_buf.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_file_open@20
1>oss_c_sdk_lib.lib(aos_transport.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_pstrdup@8
1>oss_c_sdk_lib.lib(aos_transport.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_atoi64@4
1>oss_c_sdk_lib.lib(aos_transport.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_table_elts@4
1>oss_c_sdk_lib.lib(aos_transport.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_table_addn@12
1>oss_c_sdk_lib.lib(aos_string.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_pstrndup@12
1>oss_c_sdk_lib.lib(aos_status.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_strnatcasecmp@8
1>oss_c_sdk_lib.lib(oss_auth.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_is_empty_table@4
1>oss_c_sdk_lib.lib(oss_auth.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_strnatcmp@8
1>oss_c_sdk_lib.lib(aos_fstack.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_array_make@12
1>oss_c_sdk_lib.lib(aos_fstack.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_array_push@4
1>oss_c_sdk_lib.lib(aos_fstack.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_array_pop@4
1>oss_c_sdk_lib.lib(aos_util.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_sha1_final@8
1>oss_c_sdk_lib.lib(aos_util.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_time_exp_gmt@12
1>oss_c_sdk_lib.lib(aos_util.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_sha1_update@12
1>oss_c_sdk_lib.lib(aos_util.obj) : error LNK2001: 无法解析的外部符号 __imp__apr_sha1_init@4

展开
收起
zxywd 2015-11-21 16:55:10 10915 0
4 条回答
写回答
取消 提交回答
  • 回 13楼liuzhennan的帖子
    看这个   http://bbs.aliyun.com/read/264098.html?spm=5176.bbsl211.0.0.JEk4Ti
    2016-01-04 09:50:58
    赞同 展开评论 打赏
  • Re阿里云C SDK的问题
    128 aos_buf.c:91 apr_file_open failure, code:22 Invalid argument.
    128 oss_util.c:211 Open read file fail, filename:D:/liuzhennanobject刘振南/pigeon_input.avi

    上传路径如果是英语或数字就没有问题但如果是中文就出现上述问题???
    请指教!
    2016-01-02 10:27:22
    赞同 展开评论 打赏
  • Re阿里云C SDK的问题
    就是这样弄的,如果不是这样弄会提示找不到lib的。这个是链接错误,不是编译错误 。我现在从网上下载libxm2和apr,apr-util,替换相应的lib,再试试。

    -------------------------

    Re阿里云C SDK的问题
    这两个没问题啊。这两个是C工程,不是C++工程。libapr你们是怎么编译的?我打算换libapr

    --------------------Configuration: libapr - Win32 Release--------------------
    Linking...
       Creating library Release/libapr-1.lib and object Release/libapr-1.exp
    apr_atomic.obj : error LNK2001: unresolved external symbol _InterlockedCompareExchangePointer
    apr_atomic.obj : error LNK2001: unresolved external symbol _InterlockedExchangePointer
    Release\libapr-1.dll : fatal error LNK1120: 2 unresolved externals
    Error executing link.exe.
    libapr-1.dll - 3 error(s), 0 warning(s)

    用viusal c++编译的时候报这种错误。

    -------------------------

    Re阿里云C SDK的问题
    visual studio版本信息:

    -------------------------

    Re阿里云C SDK的问题
    在这个工程的基础上oss_c_sdk_sample,把已有的源文件全部删除,加一个main.cpp或main.c确实可以。但是这样不好

    -------------------------

    Re阿里云C SDK的问题
    搞定了,只能说我很无语,你们这样搞得太不人性化了。

    -------------------------

    回 10楼yjseu的帖子
    为什么一定要把oss_c_sdk_lib.lib放到third_paty\lib下面?
    为什么不能链接oss_c_sdk_lib这个工程生成的lib,就是那个目录下的,好像有链接顺序的问题?如果我把oss_c_sdk_lib这个project加到solution里面来,然后我调试的时候,就可以直接调试oss_c_sdk_lib的源代码,但实际上向你们那种做法我不知道如何调试oss_c_sdk_lib的源代码,这样就不好排查问题。
    2015-11-21 17:47:27
    赞同 展开评论 打赏
  • 回 楼主(zxywd) 的帖子
    您好,把oss c sdk作为第三方库引用可以参考一下我们提供的oss_c_sdk_sample或者oss_c_sdk_demo。引用第三方库包括两部分:第三方库的头文件以及库文件。

    具体来说:
    (1)头文件引用是在工程的配置属性中VC++ Directories选项的Include Directories,需要填入引用的第三方库头文件,比如third_party\include\apr;third_party\include\aprutil;third_party\include\curl;third_party\include\libxml;third_party\include\oss_c_sdk;third_party\include;$(IncludePath)

    (2)库文件引用是在工程的配置属性中Linker选项,需要填入第三方库文件的路径以及名称。库路径在General选项的Additional Library Directoried,比如third_party\lib;%(AdditionalLibraryDirectories)。 库名称在Input选项的Additional Dependencies,比如apr-1.lib;aprutil-1.lib;curl.lib;xml2.lib;oss_c_sdk_lib.lib;%(AdditionalDependencies)

    请您试一下。

    -------------------------

    oss c sdk sample和oss c sdk demo这两个工程可以运行吗?如果可以的话,对比一下您的工程和oss c sdk demo工程配置的区别

    -------------------------

    回 7楼(zxywd) 的帖子
    有几点说明一下,首先,我们给出的demo和sample也是visual c++工程,oss c sdk lib 通过在头文件中加入extern "C"声明,使c sdk能够被c++代码引用。另外,您也发现oss_c_sdk_demo能够正常运行,目前这个示例比较简单,建议您花一点时间看一下,会对您有所帮助,具体来说,您的main函数里面头文件包含有问题,以os_demo.c为例,里面包含的您说的main函数,头文件引用如下:
    #include "aos_log.h"
    #include "aos_util.h"
    #include "aos_string.h"
    #include "aos_status.h"
    #include "oss_auth.h"
    #include "oss_util.h"
    #include "oss_api.h"
    #include "oss_config.h"
    #include "oss_test_util.h"

    其中前面几个都是oss c sdk的头文件,您的工程里面引用oss c sdk时这些头文件需要包含。最后一个头文件是封装了一些常用的函数。
    另外,oss_c_sdk_sample中对每一个接口都以测试case的形式给出了示例,说实话内容有点多,所以建议您先看demo,把编译和oss c sdk使用的方式有所了解,然后根据您的需要有选择地看sample的内容

    -------------------------

    回 9楼(zxywd) 的帖子
    您好,请问您说的不人性化具体指什么?如果有好的建议,我们会认真改进

    -------------------------

    回 11楼(zxywd) 的帖子
    第一个问题,把oss_c_sdk_lib.lib放到third_party\lib下面只是一个建议,您如果觉得这样不好,可以修改工程属性中第三方库的路径。第二个问题,您也可以把在oss c sdk_lib加入到您的solution里面来,或者在oss_c_sdk_lib这个solution里面创建您自己的project也可以。第三个问题,就算把oss_c_sdk_lib作为third_party引入,调试时候也可以通过设置断点进行调试。
    2015-11-21 17:34:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云云原生 Serverless 技术实践营 PPT 演讲 立即下载
阿里云产品十月刊 立即下载
基于阿里云构建博学谷平台实时湖仓 立即下载