Неопределенная ссылка на функции из библиотеки.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,

Другие вопросы по тегам