Ошибка на этапе линковки: undefined reference to `__imp_FT_CreateDeviceInfoList'

Пытаюсь скомпилировать простейшую программу, взаимодействующую с чипом FT2232h. Установил драйвера с помощью CDM***_Setup.exe. Чип определился в диспетчере устройств как USB Serial Port (в двух экземплярах, что, в целом, логично). Имеется следующая структура проекта

ft2232_check
|
|--build
|
|--.vscode
|
|--ftSrc
   |
   |-CMakeLists.txt
   |-ftd2xx.h
   |-ftd2xx.lib
|
|-main.c
|-CMakeLists.txt

Содержимое main и CMakeLists.txt следующее:

main.c:
---------------------
#include <stdio.h>
#include "ftSrc\ftd2xx.h"


FT_STATUS myftStatus;
FT_DEVICE_LIST_INFO_NODE *devInfoMode;
DWORD myNumDevs;
LPDWORD myWord;

int main(){
    myftStatus = FT_CreateDeviceInfoList(&myNumDevs);
    FT_GetDeviceInfoList(devInfoMode, myWord);

    return 0;
}


---------------------
.\CMakeLists.txt
cmake_minimum_required(VERSION 3.6) 

project(myDriverFTDI)

include_directories(ftSrc)

add_executable(main_file main.c)
add_subdirectory(ftSrc)

target_link_libraries(main_file mylib)


---------------------
ftSrc\CMakeLists.txt
cmake_minimum_required(VERSION 3.6)  

project(SysDriver)

set(SRC_LIB ftd2xx.lib)

add_library(mylib SHARED ${SRC_LIB})

set_target_properties(mylib PROPERTIES LINKER_LANGUAGE C)

Далее в терминал VS Code (где я и работаю) ввожу следующие команды:

  • cmake C:\ ...\ft2232_check (на данном этапе не получаю никаких ошибок, директория build, из которой я вызываю эту команду, наполняется характерным содержимым, в директории в том числе появляется папка ftSrc, содержащая Makefile, libmylib.dll, libmylib.dll.a и папку CMakeFiles)

  • make На этом этапе всё и ломается. Вывод в терминал следующий:

    [ 33%] Built target mylib

    [ 66%] Linking C executable main_file.exe

    C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\main_file.dir/objects.a(main.c.obj): in function main':C:/Users/dmitr/Desktop/ft2232_driver/main.c:11:(.text+0x1a): undefined reference to __imp_FT_CreateDeviceInfoList'

    C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/dmitr/Desktop/ft2232_driver/main.c:12:(.text+0x3a): undefined reference to `__imp_FT_GetDeviceInfoList'

    collect2.exe: error: ld returned 1 exit status

    make[2]: *** [main_file.exe] Ошибка 1

    make[1]: *** [CMakeFiles/main_file.dir/all] Ошибка 2

    make: *** [all] Ошибка 2

Что дополнительно вызывает непонимание:

  • изначально ftd2xx.h и ftd2xx.lib лежали в странном пути (C:\Users\ ...\AppData\Local\Temp\FTDI-Driver). Вроде винда все драйвера хранить должна в C:\Windows\System32\drivers?;
  • Ошибки зависят от используемых мной функций. Пробовал использовать FT_Open(), FT_Close() и ещё пару функций - получаю те же undefined reference to _imp_FTназвание_функции
  • пробовал вместо ftd2xx.lib подсовывать ftd2xx64.dll - безрезультатно
  • скачивание с оф.сайта примеров даёт двоякий результат: если запускать сразу исполняемый файл, всё работает. Если пытаться собрать исходники (правда, без CMake) - вылезают те же undefined reference to...

Буду крайне признателен за помощь.


Ответы (0 шт):