2015-02-10 2 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 32bit. И мой файл делают это:

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. На самом деле, [страница MSDN для 'strtoll'] (https://msdn.microsoft.com/en-us/library/dn320180.aspx) сообщает о своей доступности только из VS2013. –

ответ

2

Стандартная библиотека Microsoft C не содержит определения для strtoll(), который преобразует строку C в длинный.

MS предоставляет другую функцию, называемую _strtoi64(), которая делает то же самое и имеет точно такую ​​же подпись - просто используйте ее или определите макрос для strtoll под MSVC.

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

Я попытался '' strtoi64'', но также получил '' неразрешенный внешний символ''. Зачем? – 2shou

+0

Вы добавили подчеркивание к началу функции ('_strtoi64')? Он определен в 'stdlib.h', вы уверены, что это ошибка компоновщика? – Kornel

+0

Прохладный. Оно работает. Спасибо! – 2shou

Смежные вопросы