Я пытаюсь статически связать libssh с моим проектом, созданным с использованием make-файла mingw/mysys, однако независимо от того, что я пытаюсь сделать, я получаю целую кучу ошибок неопределенных ссылок. Я потратил часы на изучение этого, но я все еще не могу это исправить. Ниже приведен мой make-файл и несколько примеров вывода. Я также скомпилировал файл libssh.a с помощью cmake с параметром WITH_STATIC_LIB, установленным на 1. Я не понимаю, как я могу продолжать получать эти ошибки, даже если мой компоновщик может найти файл libssh.a. Я неправильно построил?
Пример вывода:
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: build/BMU.o: in function `ZN3ssh7SessionC1Ev':
./include/libssh/libsshpp.hpp:130: undefined reference to `_imp__ssh_new'
.
.
.
Makefile
CC := g++
TARGET := "dist/target"
BUILDDIR := build
SRCDIR := src
CFLAGS := -std=c++17 -g -mconsole
SRCEXT := cpp
SOURCES := $(wildcard $(SRCDIR)/*.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%, $(BUILDDIR)/%, $(SOURCES:.$(SRCEXT)=.o))
INCLUDE := -I./include
LIB := -L./lib -lws2_32 -lssh -lmodbus -static
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@printf "\e[33m\e[1mBuilding...\e[0m\n";
@mkdir -p $(BUILDDIR)
@echo " $(notdir $@) from $(notdir $<)"
@$(CC) $(CFLAGS) $(INCLUDE) -c -o $@ $<
$(TARGET): $(OBJECTS)
@printf "\e[35m\e[1mLinking...\e[0m\n";
@mkdir -p dist
@echo " $(notdir $(OBJECTS))"
@$(CC) $(CFLAGS) -o $@ $^ $(LIB)
Сборка Libssh:
Сначала я сделал git clone https://git.libssh.org/projects/libssh.git libssh
затем с помощью cmake-gui создал его для make-файла MySys с параметром «WITH_STATIC_LIB», установленным на «ON», и «WITH_SHARED_LIB» на «OFF».
Затем я запустил make
со своего терминала, и он создал файл libssh.a, который я переместил в папку ./lib
в моем проекте.
Файл make смог найти файл libssh.a, но я все еще получаю эти ошибки.
Любая помощь приветствуется, и да, я просмотрел множество других сообщений stackoverflow, прежде чем опубликовать себя.
Другие вещи, которые я пробовал
#define LIBSSH_STATIC 1
и без него
используя vcpkg для установки libssh, но это создает файл .lib, который имеет те же проблемы, что и файл .a
Редактировать:
Включение LIBSSH_STATIC приводит к тому, что вывод выглядит так:
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: ./lib\libssh.a(channels.c.obj):channels.c:(.text+0x1979): undefined reference to `_imp__ssh_buffer_add_data'