c-sdk icon indicating copy to clipboard operation
c-sdk copied to clipboard

windows下使用静态库的方式编译无法通过

Open wukongzhikong opened this issue 6 years ago • 7 comments

你好! 我将c-sdk-for-windows的master分支下的include和lib目录下的文件分别添加到项目的includepath和链接path中(qt项目),编译报错“error: LNK2019: 无法解析的外部符号 Qiniu_Client_Cleanup”,查看Qiniu_Client_Cleanup发现是通过“QINIU_DLLAPI extern void”这种方式声明的。随后我尝试在项目输出目录下加入master分支下bin目录下的dll文件,依然报该错误。再次尝试将dll文件添加到链接path中,编译时出现错误:“error: LNK1107: 文件无效或损坏: 无法在 0x2C8 处读取”。 另外还有一个问题,我看现在项目中有在linux和mac上编译的文档,能否提供一份在windows手动编译的文档呢?

wukongzhikong avatar Jul 28 '18 04:07 wukongzhikong

试试看这个:https://github.com/qiniu/c-sdk/wiki/Windows%E4%B8%8B-C-SDK%E7%9A%84%E7%BC%96%E8%AF%91

jemygraw avatar Jul 31 '18 02:07 jemygraw

@jemygraw 你好,我尝试了这个方法,可以成功编译得到qiniu.lib,但集成到项目中依然会有“无法解析的外部符号 ”这样的错误。

wukongzhikong avatar Jul 31 '18 09:07 wukongzhikong

集成到外部项目需要把lib和dll文件都引用看看。

jemygraw avatar Jul 31 '18 09:07 jemygraw

@jemygraw 你好,在项目中将qiniu.dll添加到链接路径中,编译时会报错:“error: LNK1107: 文件无效或损坏: 无法在 0x2C8 处读取”。按理说只需将头文件和静态库文件分别添加到include路径和link路径,就可以编译了呀。。dll文件放到项目输出目录,程序运行时才会用到,不是这样吗。。

wukongzhikong avatar Aug 01 '18 03:08 wukongzhikong

你注意下编译的时候选择的CPU类型,和你集成到项目中的CPU类型是否一致。

jemygraw avatar Aug 01 '18 10:08 jemygraw

另外程序链接的时候需要dll库,而不仅仅是运行的时候。

jemygraw avatar Aug 01 '18 10:08 jemygraw

@jemygraw 谢谢,成功集成了,之前是因为编译得到的lib是32位的,而项目target是Win64,我将项目target修改为x86之后就可以了。额外想问一下,能不能也提供64位的build选项呢?

wukongzhikong avatar Aug 02 '18 08:08 wukongzhikong