Ошибка на этапе линковки: 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...
Буду крайне признателен за помощь.