Предисловие: Я использую программное обеспечение Code :: Blocks на машине Windows 10 и программировании на C++. Я использую библиотеки для принт-принтеров Scientific CCD.Неопределенная ссылка на функции из библиотеки .dll
Я постараюсь быть конкретным, насколько это возможно. Я пытаюсь создать DLL-файл, используя несколько функций, которые управляют принт-инструментальной камерой (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");
}
}
Но компилятор дает мне these ошибки после того, как я строю свой код. Он утверждает, что каждая отдельная функция, которую я назвал, является неопределенной ссылкой, даже после того, как я успешно связал библиотеки в 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 `[email protected]'
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:21: undefined reference to `[email protected]'
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:22: undefined reference to `[email protected]'
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:27: undefined reference to `[email protected]'
C:/Users/Philip/Documents/CppProjects/SampleDLL/main.cpp:28: undefined reference to `[email protected]'
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))
Я не знаю, что еще можно сделать, чтобы исправить это. Кажется, все правильно, но функции по-прежнему не могут быть идентифицированы в библиотеке. У кого-нибудь есть идеи?
Интересно, что это не создает сообщение об ошибке «не может прочитать этот формат библиотеки» из компоновщика. – user4581301
Итак, если g ++ не может обрабатывать .lib-файлы, то почему они даже доступны в первую очередь? Разве это не делает невозможным, чтобы какой-либо компилятор C++ даже использовал файлы библиотеки, если они не доступны в формате .so? И «Я знаю, что они связаны правильно», я имел в виду, что я потратил час на устранение проблемы с «библиотекой, не связанной», а затем, наконец, решил ее. – philipv
Я не понимаю ваш вопрос, я уже говорил, что они работают с 'cl'. – Blindy