Неопределенная ссылка на функции из библиотеки.dll
Предисловие: Я использую программное обеспечение Code::Blocks на Windows 10 Machine и программирую на C++. Я использую библиотеки для CCD камеры Princeton Instruments Scientific.
Я постараюсь быть здесь как можно более конкретным. Я пытаюсь создать файл.dll с помощью нескольких функций, которые управляют камерой Princeton Instruments (PIcam). Я делаю это.dll, потому что я хочу встроить этот код (который находится в C++) в другой программе Python. Вот мой текущий соответствующий код main.cpp:
#include "main.h"
#include "stdio.h"
#include "picam.h"
// a sample exported function
void DLL_EXPORT SomeFunction(const LPCSTR sometext)
{
MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION);
}
void DLL_EXPORT connectCamera()
{
Picam_InitializeLibrary();
PicamHandle camera;
PicamCameraID id;
//const pichar* string;
//PicamAvailableData data;
//PicamAcquisitionErrorsMask errors;
//piint readoutstride = 0;
if (Picam_OpenFirstCamera( &camera ) == PicamError_None )
Picam_GetCameraID( camera, &id );
else {
Picam_ConnectDemoCamera(
PicamModel_Pixis100F,
"0008675309",
&id );
Picam_OpenCamera( &id, &camera );
printf( "No Camera Detected, Creating Demo Camera\n" );
}
}
Но компилятор выдает мне эти ошибки после сборки кода. Он утверждает, что каждая вызванная мной функция является неопределенной ссылкой, даже после того, как я успешно связал библиотеки в Code::Blocks.
Я знаю, что мои библиотеки связаны правильно. Все эти функции лежат в библиотеке Picam.lib, которая, как я знаю, связана правильно. Вот код сборки журнала, чтобы показать это:
mingw32-g++.exe -shared -Wl,--output-def=bin\Debug\libSampleDLL.def -Wl,--out-implib=bin\Debug\libSampleDLL.a -Wl,--dll -LC:\Users\Philip\Documents\CppProjects\SampleDLL obj\Debug\main.o -o bin\Debug\SampleDLL.dll -lPicam -luser32 -lPicam C:\Users\Philip\Documents\CppProjects\SampleDLL\Picam.lib
obj\Debug\main.o: In function `Z13connectCamerav':
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:13: undefined reference to `_imp__Picam_InitializeLibrary@0'
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:21: undefined reference to `_imp__Picam_OpenFirstCamera@4'
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:22: undefined reference to `_imp__Picam_GetCameraID@8'
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:27: undefined reference to `_imp__Picam_ConnectDemoCamera@12'
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:28: undefined reference to `_imp__Picam_OpenCamera@8'
collect2.exe: error: ld returned 1 exit status
Creating library file: bin\Debug\libSampleDLL.a
Process terminated with status 1 (0 minute(s), 0 second(s))
5 error(s), 0 warning(s) (0 minute(s), 0 second(s))
Я не знаю, что еще нужно сделать, чтобы это исправить. Кажется, что все правильно, но функции по-прежнему не могут быть определены в библиотеке. У кого-нибудь есть какие-либо идеи?
1 ответ
Я знаю, что мои библиотеки связаны правильно.
Ну, тогда все готово, не так ли?
Однако, если вы хотите сохранять непредвзятость и понимать процесс связывания, вы, вероятно, должны знать, что gcc (который вы используете) не знает, что делать с .lib
файлы, это файлы библиотеки Microsoft. Файлы библиотеки gcc заканчиваются на .a
или же .so
,