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

  • Вопрос

  • Делаю все по сайту Создание расширения 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.

Ответы

  • Ошибка линкера "Неразрешенный внешний символ" означает, что данный идентификатор импортируется из DLL. Линкеру необходимо указать соответствующий LIB-файл в свойствах проекта: "Компоновщик - Ввод - Дополнительные зависимости" для того чтобы он смог настроить все связи.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа fryn3 8 июня 2017 г. 10:17

Все ответы

  • Ошибка линкера "Неразрешенный внешний символ" означает, что данный идентификатор импортируется из DLL. Линкеру необходимо указать соответствующий LIB-файл в свойствах проекта: "Компоновщик - Ввод - Дополнительные зависимости" для того чтобы он смог настроить все связи.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа fryn3 8 июня 2017 г. 10:17
  • а именно Python36.dll -- в моем случаи
    8 июня 2017 г. 10:18