2015-02-10 97 views
2

我正在将Python库移动到Windows平台,这取决于一些c代码。 但是,我没能建立它在Windows下,并得到了:无法解析的外部符号_stricoll

util.obj : error LNK2019: unresolved external symbol _strtoll 

坏的代码是:

x_space[j].index = (INT64)strtoll(idx,&endptr,10); 

我的编译器是VS2010,这下XP 32位使用。 我的make文件是:

CXX = cl.exe 
CFLAGS = /nologo /O2 /EHsc /I. /D _WIN32 /D _CRT_SECURE_NO_DEPRECATE 
TARGET = . 

lib: util.c 
$(CXX) $(CFLAGS) -LD util.c /Iliblinear -Fe$(TARGET)\util -link -DEF:util.def 

我该如何解决这个问题?

+0

的['strtoll'(http://en.cppreference.com/w/c/string/byte/strtol)函数在C99标准的新的,直到最近在Visual Studio编译器和标准库对C99的支持很少。实际上,[strtoll'的MSDN页面(https://msdn.microsoft.com/en-us/library/dn320180.aspx)仅从VS2013报告其可用性。 – 2015-02-10 09:06:30

回答

2

Microsoft标准C库不包含从C字符串转换为long long的strtoll()的定义。

MS提供了另一个功能,名为_strtoi64(),它具有相同的功能,并且具有完全相同的签名 - 只需在MSVC下使用它或定义一个用于strtoll的宏即可。

__int64 _strtoi64(
    const char *nptr, 
    char **endptr, 
    int base 
); 
+0

我已经尝试过''strtoi64'',但也有''无法解析的外部符号''错误。为什么? – 2shou 2015-02-10 09:24:57

+0

你有没有在函数的开头加下划线('_strtoi64')?它在'stdlib.h'中定义,你确定它是一个链接器错误? – Kornel 2015-02-10 09:30:30

+0

很酷。有用。谢谢! – 2shou 2015-02-10 09:36:00