неразрешенный внешний символ C++/ VS 2017

356
08 июня 2017, 07:48

Делаю все по сайту Создание расширения C++ для Python.

В части "Преобразование проекта С++ в расширение для Python":
Не могу собрать проект, тк ошибки: LNK2001 у __imp__PyFloat_FromDouble, __imp__PyFloat_AsDouble, __imp__PyModule_Create2. И в итоге ошибка LNK1120.
Помогите разобраться с ошибкой!
Вот код:

#include <Python.h>
#include <Windows.h>
#include <cmath>    
const double e = 2.7182818284590452353602874713527;
double sinh_impl(double x) {
    return (1 - pow(e, (-2 * x))) / (2 * pow(e, -x));
}
double cosh_impl(double x) {
    return (1 + pow(e, (-2 * x))) / (2 * pow(e, -x));
}
//double tanh_impl(double x) {
//  return sinh_impl(x) / cosh_impl(x);
//}
PyObject* tanh_impl(PyObject *, PyObject* o) {
    double x = PyFloat_AsDouble(o);
    double tanh_x = sinh_impl(x) / cosh_impl(x);
    return PyFloat_FromDouble(tanh_x);
}
static PyMethodDef superfastcode_methods[] = {
    // The first property is the name exposed to python, the second is the C++ function name        
    { "fast_tanh", (PyCFunction)tanh_impl, METH_O, nullptr },
    // Terminate the array with an object containing nulls.
    { nullptr, nullptr, 0, nullptr }
};
static PyModuleDef TanhBenchmark_module = {
    PyModuleDef_HEAD_INIT,
    "TanhBenchmark",                        // Module name
    "Provides some functions, but faster",  // Module description
    0,
    superfastcode_methods                   // Structure that defines the methods
};
PyMODINIT_FUNC PyInit_TanhBenchmark() {
    return PyModule_Create(&TanhBenchmark_module);
}

Вот скрин ошибок: Примечание: В части "Создания основного проекта С++" в пункте 7 предположительно две ошибки:
1. Забыли указать тип принимаемого аргумента "х". Я написал double x.
2. При исправлении этой ошибки возникает другая: С2169 у tanh. Возможное решение: переименовать tanh в tanh_impl. Ну и так же вместо sinh и cosh напишем sinh_impl и cosh_impl.

Answer 1
  1. Проверьте что Python32.lib указана для компоновки, свойства проекта: Linker > Input > Additional Dependencies
  2. Проверте что в папке C:\Program Files\Python36\libs действительно находится указанная библиотека.
  3. Если первые два пункта выполняются, то нужно еще раз убедится, что версия и сборка вашей Python32.lib именно та, которая вам нужна.
  4. Если вы уверены что в ваша Python32.lib правильня, то нужно сообщить об ошибке тому, у кого вы его взяли.
READ ALSO
Делаю в VS2012 C++ по примеру из Borland C++ Builder, выдает ошибку LNK2019

Делаю в VS2012 C++ по примеру из Borland C++ Builder, выдает ошибку LNK2019

ЗдравствуйтеПостепенно перепечатываю пример программы на ПК из http://we

331
Создать функцию, имеющую два аргумента и возвращающую в качестве аргумента число из отрезка [a,b] (С++)

Создать функцию, имеющую два аргумента и возвращающую в качестве аргумента число из отрезка [a,b] (С++)

Создать функцию, которая будет иметь два целочисленных параметра a и b, и в качестве своего значения возвращать случайное целое число из отрезка...

321
Посоветуйте сборщик GUI для программ на С++

Посоветуйте сборщик GUI для программ на С++

Добрый вечер,разрабатываю GUI для своей проги остановился на QT4, но хотел так же узнать существует ли плагин для сборки GUI на eclipse С++ наподобие...

234
Проверка ввода в поле с частичной подстановкой

Проверка ввода в поле с частичной подстановкой

Есть задача - надо реализовать проверку ввода в поле улицы с подстановкой улицы и возможностью дописать дом /квартируПример, клиент вводит...

274