如果这两个是导出的变量,在qiniu.def中不是应该写成下面那样吗?
EXPORTS
QINIU_ACCESS_KEY DATA
QINIU_SECRET_KEY DATA
但是我看了一下C-SDK的源码,里面是没有“DATA”关键字的。
这不是重点,我想问的是,在C++中引用七牛SDK,应该怎么给QINIU_ACCESS_KEY和QINIU_SECRET_KEY这两个变量赋值?
我试过以下方法,无效:
extern
或_declspec( dllimport )
等语句的情况下,我直接用下面方法赋值:(这也是七牛文档例子代码中的用法)extern "C"
{
#include "qiniu/conf.h"
#include "qiniu/rs.h"
#include "qiniu/io.h"
}
void MyClass:setQiniuKey()
{
QINIU_ACCESS_KEY = KQiniuAK; //全局变量
QINIU_SECRET_KEY = KQiniuSK; //全局变量
}
编译、链接都没问题,但是运行到赋值这里的时候,异常提示:0x00401447 处未处理的异常: 0xC0000005: 写入位置 0x0040fe72 时发生访问冲突
extern "C"
{
extern const char* QINIU_ACCESS_KEY;
extern const char* QINIU_SECRET_KEY;
}
运行,结果同上,还是访问冲突。
extern "C"
{
extern const char* _declspec(dllimport) QINIU_ACCESS_KEY;
extern const char* _declspec(dllimport) QINIU_SECRET_KEY;
}
这下编译都通不过了,提示:error C2059: 语法错误 : “__declspec(dllimport)”
那么请问,引用七牛C-SDK,正确给这两个变量赋值的完整步骤是什么?谢谢。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
https://github.com/qiniu/c-sdk/tree/develop/docs
参考这篇使用文档:
C-SDK 的
conf.h
文件中声明了对应的两个变量:QINIU_ACCESS_KEY
和QINIU_SECRET_KEY
。你需要在启动程序之初初始化这两个变量为七牛颁发的AccessKey
和SecretKey
。请问你用的是C-SDK还是CPP-SDK?
如果是前者,那么qiniu.def里确实应该在相关定义处加上DATA提示符,否则链接器会认为这两个符号是函数链接而非变量链接,进而导致现象1。
也就是说,你最初的判断是正确的,所以值得先重试一下。