Я надеюсь, что в эпоху искусственного интеллекта найдутся хотя бы несколько людей, которые все еще смогут помочь решить проблему, которую не может решить «всезнающий» GPT.
Проблема:
Я пытаюсь создать интерфейс Python для библиотеки C++, и несколько модулей выдают ошибки при связывании. Подробности об ошибке приведены ниже.
Подробности об ошибке
2024-03-14 18:26:40,630 - ERROR -
------------------------------
Error compiling stepper_motor:
Error code: 1
Error: C:/SysGCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\User\AppData\Local\Temp\ccfElxip.o:stepper_motor_wrap.cxx:(.text+0x178a4): undefined reference to `SBC_RequestTriggerSwitches'collect2.exe: error: ld returned 1 exit status
g++ command: ['g++', '-shared', '-o', 'd:\\CZI_scope\\code\\pymodules\\thorlabs_kinesis\\motion_control\\benchtop\\_stepper_motor.pyd', 'd:\\CZI_scope\\code\\pymodules\\thorlabs_kinesis\\motion_control\\benchtop\\stepper_motor_wrap.cxx', '-Ic:\\Users\\User\\mambaforge\\envs\\rich\\include', '-Id:\\CZI_scope\\code\\pymodules\\thorlabs_kinesis\\__include', '-Lc:\\Users\\User\\mambaforge\\envs\\rich', '-Ld:\\CZI_scope\\code\\pymodules\\thorlabs_kinesis\\__lib', '-lpython39', '-lThorlabs.MotionControl.Benchtop.StepperMotor', '-Wno-error']
------------------------------
Рассматриваемый символ определен в заголовочном файле (следовательно, ошибка связывания, а не компиляции). Я сделал дамп экспорта файла .lib с помощью dumpbin, и судя по выходным данным, имя было искажено. Я знаю, что это стандартно для библиотек C++, поэтому не уверен, что проблема в этом.
Вывод в корзину
?RequestTriggerSwitches@CBenchtopStepperMotorChannel@StepperMotor@Benchtop@MotionControl@Thorlabs@@QEBAFXZ (public: short __cdecl Thorlabs::MotionControl::Benchtop::StepperMotor::CBenchtopStepperMotorChannel::RequestTriggerSwitches(void)const )
Определение заголовка
#ifdef BENCHTOPSTEPPERMOTORDLL_EXPORTS
/// Gets the Benchtop Stepper API.
#define BENCHTOPSTEPPERMOTOR_API __declspec(dllexport)
#else
#define BENCHTOPSTEPPERMOTOR_API __declspec(dllimport)
#endif
extern "C"
{
BENCHTOPSTEPPERMOTOR_API short __cdecl SBC_RequestTriggerSwitches(char const * serialNo, short channel);
...
}
Файл интерфейса SWIG
%module stepper_motor
// Remove calling convention macros compatibility with SWIG
#define __cdecl
#define __stdcall
#define __declspec(x)
#define WINAPI
%{
#include
#include
#define BENCHTOPSTEPPERMOTORDLL_EXPORTS
#include "Thorlabs.MotionControl.Benchtop.StepperMotor.h"
%}
%include "Thorlabs.MotionControl.Benchtop.StepperMotor.h"
Подробнее здесь: https://stackoverflow.com/questions/781 ... -reference
Ошибка связывания MinGW ld – неопределенная ссылка ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение