LNK2038: обнаружено несоответствие для «RuntimeLibrary»: значение «MT_StaticRelease» не соответствует значению «MD_DynamicRelease» в main.obj - PullRequest
0 голосов
/ 14 ноября 2018

я пытаюсь скомпилировать библиотеку essnac-ng из github с msvc2017 для использования в уже существующем qt-Project.

Мне удалось скомпилировать его, используя msys2 (с make, autoconf, automake, yacc, bison) и powershell:

cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x86 `& powershell
cd D:\Projekte\esnacc-ng
bash ./boot.sh
bash ./configure LD=linker.exe
make
make install

Проблема 1: во время make компилируются только статические библиотеки со следующим предупреждением:

warning: undefined symbols not allowed in x86_64-pc-msys shared libraries; building static only

после попытки сказать, что здесь написано: libtool: неопределенные символы не разрешены в i686-pc-mingw32 shared я получаю ошибку во время make:

cl : Befehlszeile error D8021 : Ungültiges numerisches Argument /Wl,-DLL,-IMPLIB:cxx-lib/.libs/cxxasn1.dll.lib.
make[1]: *** [Makefile:1641: cxx-lib/libcxxasn1.la] Error 2
make[1]: Leaving directory '/d/Projekte/esnacc-ng'
make: *** [Makefile:1370: all] Error 2
PS D:\Projekte\esnacc-ng>

Проблема 2: Попытка использовать статическую библиотеку, как это в моем файле pri:

LIBS += -L$$PWD/cxx-lib/libs/ -lcxxasn1
LIBS += -L$$PWD/cxx-lib/libs/ -lcxxasn1rose

INCLUDEPATH += $$PWD
INCLUDEPATH += $$PWD/cxx-lib/inc

HEADERS += $$PWD/MyAsnFile.h

SOURCES += $$PWD/MyAsnFile.cpp

QMAKE_CFLAGS_MT+=$$PWD/cxx-lib/inc
QMAKE_CXXFLAGS_MT+=$$PWD/cxx-lib/inc
#QMAKE_CFLAGS_RELEASE += /MD
DISTFILES += \
    $$PWD/cxx-lib/inc/snacc.h.in

Я получаю ошибку во время компиляции:

Fehler: LNK2038: Konflikt ermittelt für "RuntimeLibrary": Der Wert "MT_StaticRelease" stimmt nicht mit dem Wert "MD_DynamicRelease" in main.obj überein.

Я видел эту ветку здесь, но не уверен, как превратить ее во что-то полезное для себя: LNK2038: обнаружено несоответствие для 'RuntimeLibrary': значение 'MT_StaticRelease' не соответствует значению 'MD_DynamicRelease' в file.obj

1 Ответ

0 голосов
/ 14 ноября 2018

Мне удалось решить это так: я удалил stdafx.h и stdafx.cpp из исходного кода проекта и удалил строку, где он был включен (для esnacc это была snacdll. CPP)

Я скомпилировал статическую библиотеку, настроенную так:

bash ./configure LD=linker.exe CFLAGS=-MD CXXFLAGS=-MD --build=i686-pc-msys --host=i686-pc-msys

и добавил библиотеки cxxasn1.lib и cxxasn1rose.lib в мой проект qt однако я все еще получил бы ошибки компоновщика: ошибки LNK2001

error lnk2001 unresolved external symbol __imp__closesocket

поэтому я связался с библиотекой Ws2_32.lib:

LIBS += -L$$PWD/cxx-lib/libs/ -lcxxasn1
LIBS += -L$$PWD/cxx-lib/libs/ -lcxxasn1rose
LIBS += -lws2_32
INCLUDEPATH += $$PWD
INCLUDEPATH += $$PWD/cxx-lib/inc

HEADERS += $$PWD/CoopIts.h

SOURCES += $$PWD/CoopIts.cpp

QMAKE_CFLAGS_MT+=$$PWD/cxx-lib/inc
QMAKE_CXXFLAGS_MT+=$$PWD/cxx-lib/inc
...