Проект Gradle C ++: зависимости win32 не включены

У меня возникли проблемы с использованием Gradle с C ++. В частности, я собираю спецификацию нативной библиотеки в одном проекте, который использует win32 и opengl, и пытается ссылаться на эту статическую библиотеку из другого исполняемого тестового проекта.

Настройки библиотеки gradle.build:

        repositories {
libs(PrebuiltLibraries) {

//defines the windows pre-built library, headers and .lib files

windowsSDK {
headers.srcDirs srcWindowsSDKDirName
binaries.withType(PrebuiltStaticLibraryBinary) {
staticLibraryFile = file(srcWindowsSDKLibName+"10.0.16299.0/"+"um/"+"x86/"+"User32.Lib")

binaries.withType(SharedLibraryBinary) {
sharedLibraryLinkFile = file(srcWindowsSDKLibName+"10.0.16299.0/"+"um/"+"x86/"+"User32.Lib")
}

}
}

windowsSDKGLU {

headers.srcDir srcWindowsSDKDirName
binaries.withType(PrebuiltStaticLibraryBinary) {
staticLibraryFile = file(srcWindowsSDKLibName+"10.0.16299.0/"+"um/"+"x86/"+"GlU32.Lib")
}

binaries.withType(SharedLibraryBinary) {
sharedLibraryLinkFile = file(srcWindowsSDKLibName+"10.0.16299.0/"+"um/"+"x86/"+"GlU32.Lib")
}
}

windowsSDKGL {

headers.srcDir srcWindowsSDKDirName
binaries.withType(PrebuiltStaticLibraryBinary) {
staticLibraryFile = file(srcWindowsSDKLibName+"10.0.16299.0/"+"um/"+"x86/"+"OpenGL32.Lib")
}

binaries.withType(SharedLibraryBinary) {
sharedLibraryLinkFile = file(srcWindowsSDKLibName+"10.0.16299.0/"+"um/"+"x86/"+"OpenGL32.Lib")
}
}

windowsSDKGDI {

headers.srcDir srcWindowsSDKDirName
binaries.withType(PrebuiltStaticLibraryBinary) {
staticLibraryFile = file(srcWindowsSDKLibName+"10.0.16299.0/"+"um/"+"x86/"+"GDI32.lib")
}

binaries.withType(SharedLibraryBinary) {
sharedLibraryLinkFile = file(srcWindowsSDKLibName+"10.0.16299.0/"+"um/"+"x86/"+"GDI32.lib")
}
}

}
}

Это библиотеки, которые использует nativelibraryspec, и этот библиотечный проект на самом деле прекрасно работает и выдает .lib и .dll.

Из NativeExecutableSpec (мой тестовый проект) я пытаюсь сначала включить весь проект:

lib project: ':mylibrary', linkage: "static", library: 'main'

Кажется, это работает с точки зрения включения самой библиотеки — она ​​находит .lib или .dll. Однако это приводит к ошибкам ссылки:

main.lib(minimal.obj) : error LNK2019: unresolved external symbol __imp__ChoosePixelFormat@8 referenced in function "public: int __thiscall

и многое другое ……

Чтобы попробовать и проверить это вручную, я ссылался на статическую библиотеку вручную таким же образом, я включил файлы win32.lib и включил ее в проект следующим образом:

    repositories {
libs(PrebuiltLibraries) {

//defines the windows pre-built library, headers and .lib files

mySDK {
headers.srcDirs "mysdk/Shared/headers"binaries.withType(PrebuiltStaticLibraryBinary) {
staticLibraryFile = file("mysdk/build/libs/main/static/main.lib")

binaries.withType(SharedLibraryBinary) {
sharedLibraryLinkFile = file("mysdk/build/libs/main/static/main.lib")
}

}
}
}
}

и включил эти библиотеки в тест NativeExecutableSpec.

                        lib library: "mySDK", linkage: "static"

Оба метода попытки связать статическую библиотеку, которая ссылается на эти библиотеки Windows, похоже, вызывают ошибки связи, и я не уверен, почему … сама библиотека, как я упоминал, компилируется, однако исполняемый файл теста не может связать, так как он не может наследовать ссылочные библиотеки этот проект.

Я исследовал возможные причины, но до сих пор не могу найти разумного объяснения, почему библиотека компилируется, а что-либо, ссылающееся на библиотеку этой библиотеки, — нет.

Любая помощь будет оценена.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]