2015-11-06 8 views
-1

Предисловие: Я использую программное обеспечение 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)) 

Я не знаю, что еще можно сделать, чтобы исправить это. Кажется, все правильно, но функции по-прежнему не могут быть идентифицированы в библиотеке. У кого-нибудь есть идеи?

ответ

-1

Я знаю, что мои библиотеки связаны правильно.

Ну, тогда вы настроены, не так ли?

Однако, если вы хотите сохранить открытый разум и понять процесс связывания, вы, вероятно, должны знать, что gcc (который вы используете) не знает, что делать с .lib файлами, это Microsoft библиотечных файлов. Файлы библиотеки gcc заканчиваются на .a или .so.

+0

Интересно, что это не создает сообщение об ошибке «не может прочитать этот формат библиотеки» из компоновщика. – user4581301

+0

Итак, если g ++ не может обрабатывать .lib-файлы, то почему они даже доступны в первую очередь? Разве это не делает невозможным, чтобы какой-либо компилятор C++ даже использовал файлы библиотеки, если они не доступны в формате .so? И «Я знаю, что они связаны правильно», я имел в виду, что я потратил час на устранение проблемы с «библиотекой, не связанной», а затем, наконец, решил ее. – philipv

+0

Я не понимаю ваш вопрос, я уже говорил, что они работают с 'cl'. – Blindy

Смежные вопросы