Alex_Wells
@Alex_Wells
PHP/Kotlin

Почему MinGW и VS17 не хотят линковать detours.lib?

Здравствуйте. Пытаюсь detour'нуть функцию по гайду, вот код: *клик гитхаб*. Собственно все отлично, помимо того что ни VS2017, ни проект с CMake + MinGW выдают такие ошибки:
D:/Detour-master/dll/dllmain.cpp:46: undefined reference to `DetourTransactionBegin'

В папке с проектом лежит detours.lib, но ее никто не хочет линковать. В CMake проекте я прямо так и указываю:
cmake_minimum_required(VERSION 3.9)
project(dll)

find_library(psapi "D:/ProgrammingNew/Win-builds/mingw/lib/libpsapi.a")
find_library(detours "D:/Detour-master/dll/detours.lib") # <------------------------ вот

set(CMAKE_CXX_FLAGS "-fpermissive -w")
set(CMAKE_CXX_STANDARD 17)

add_library(dll SHARED
        sigscan.h
        dllmain.cpp
        )

target_link_libraries(dll psapi)
#target_link_libraries(dll detours) # <------------------------ вот два


Если раскоментировать строчки, это приведет к самой проблеме:
d:/programmingnew/win-builds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -ldetours


Если указать -L D:/Detour-master/dll в аргументы компилера, вылазит такое:
d:/programmingnew/win-builds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/Detour-master/dll/detours.lib when searching for -ldetours
d:/programmingnew/win-builds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/Detour-master/dll/detours.lib when searching for -ldetours
d:/programmingnew/win-builds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/Detour-master/dll\detours.lib when searching for -ldetours
d:/programmingnew/win-builds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -ldetours


Вопрос: как поправить последнюю проблему? Версия detours - 4.0, пытался и с той, что идет в комплекте с репозиторием, и с собственоручно скомпилированной.

Заранее спасибо.
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ответы на вопрос 1
wander
@wander
Судя по всему файл detours.lib скомпилирован для x86. А ваши проекты компилируются для x64. Начать надо с того, что привести это в соответствие. Если вы собираете detours.lib самостоятельно, то вы должны собрать ее x64-инструментарием.
Кроме того (по крайней мере раньше это точно было так), MinGW не понимает формат библиотек VS, поэтому использовать один и тот же lib файл и для VS и для MinGW не получится. У MinGW собственный формат.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы