需要帮助使用 Conan 交叉编译 libxml2

问题描述 投票:0回答:0

我一直在尝试从依赖于 libxml2 的 Linux > Windows 交叉编译应用程序。我正在尝试使用 Conan 来管理依赖项。

我一直遇到各种障碍,当前的问题是 libxml2 似乎无法找到自己的标头。

首先,找不到生成的config.h头文件:

x86_64-w64-mingw32-gcc -m64 -O3 -DNDEBUG -I/home/robert/.conan/data/libiconv/1.17/_/_/package/c6817f477abe7e9a917b102f37dc1fd0c2d95f50/include -I/home/robert/.conan/data/zlib/1.2.13/_/_/package/c6817f477abe7e9a917b102f37dc1fd0c2d95f50/include -DWIN32 -m64 -L/home/robert/.conan/data/libiconv/1.17/_/_/package/c6817f477abe7e9a917b102f37dc1fd0c2d95f50/lib -L/home/robert/.conan/data/zlib/1.2.13/_/_/package/c6817f477abe7e9a917b102f37dc1fd0c2d95f50/lib  /home/robert/.conan/data/libxml2/2.10.3/_/_/build/6a818f7d8bbba2942e1499f2d61557299d4122bd/src/xmllint.c   -o xmllint
In file included from /home/robert/.conan/data/libxml2/2.10.3/_/_/build/6a818f7d8bbba2942e1499f2d61557299d4122bd/src/xmllint.c:9:
/home/robert/.conan/data/libxml2/2.10.3/_/_/build/6a818f7d8bbba2942e1499f2d61557299d4122bd/src/libxml.h:30:10: fatal error: config.h: No such file or directory
   30 | #include "config.h"
      |          ^~~~~~~~~~
compilation terminated.

我尝试手动将它复制到源文件夹中,但这只会导致它在另一个标题上失败:

x86_64-w64-mingw32-gcc -m64 -O3 -DNDEBUG -I/home/robert/.conan/data/libiconv/1.17/_/_/package/c6817f477abe7e9a917b102f37dc1fd0c2d95f50/include -I/home/robert/.conan/data/zlib/1.2.13/_/_/package/c6817f477abe7e9a917b102f37dc1fd0c2d95f50/include -DWIN32 -m64 -L/home/robert/.conan/data/libiconv/1.17/_/_/package/c6817f477abe7e9a917b102f37dc1fd0c2d95f50/lib -L/home/robert/.conan/data/zlib/1.2.13/_/_/package/c6817f477abe7e9a917b102f37dc1fd0c2d95f50/lib  /home/robert/.conan/data/libxml2/2.10.3/_/_/build/6a818f7d8bbba2942e1499f2d61557299d4122bd/src/xmllint.c   -o xmllint

In file included from /home/robert/.conan/data/libxml2/2.10.3/_/_/build/6a818f7d8bbba2942e1499f2d61557299d4122bd/src/xmllint.c:9:
/home/robert/.conan/data/libxml2/2.10.3/_/_/build/6a818f7d8bbba2942e1499f2d61557299d4122bd/src/libxml.h:31:10: fatal error: libxml/xmlversion.h: No such file or directory
   31 | #include <libxml/xmlversion.h>
      |          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [<builtin>: xmllint] Error 1
libxml2/2.10.3: 
libxml2/2.10.3: ERROR: Package '6a818f7d8bbba2942e1499f2d61557299d4122bd' build failed
libxml2/2.10.3: WARN: Build folder /home/robert/.conan/data/libxml2/2.10.3/_/_/build/6a818f7d8bbba2942e1499f2d61557299d4122bd/build-release
ERROR: libxml2/2.10.3: Error in build() method, line 298
        autotools.make(target)
        ConanException: Error 2 while executing make xmllint -j4

这是我的conanfile:

from conans import ConanFile, CMake, tools


class SomethingConan(ConanFile):
    name = "something"
    version = "0.1.0"
    settings = "os", "compiler", "build_type", "arch"
    requires = "zlib/1.2.13", "libxml2/2.10.3", "zstd/1.5.4"
    options = {"mode": ["tests", "qt"]}
    generators = "cmake"

    def build(self):
        cmake = CMake(self)
        cmake.configure(source_folder="src")
        cmake.build()

我的个人资料基于柯南文档中的指南之一:

toolchain=/usr/x86_64-w64-mingw32 # Adjust this path
target_host=x86_64-w64-mingw32
cc_compiler=gcc
cxx_compiler=g++

[env]
CHOST=$target_host
AR=$target_host-ar
AS=$target_host-as
RANLIB=$target_host-ranlib
CC=$target_host-$cc_compiler
CXX=$target_host-$cxx_compiler
STRIP=$target_host-strip
RC=$target_host-windres

[settings]
# We are cross-building to Windows
os=Windows
arch=x86_64
compiler=gcc
os_build=Linux
arch_build=x86_64
build_type=Release

# Adjust to the gcc version of your MinGW package
compiler.version=10
compiler.libcxx=libstdc++11
build_type=Release

我正在尝试安装依赖项:

conan install -pr:h mingw.profile -s:b os_build=Linux -o mode=qt --build=missing .

我正在使用柯南 1.59.0。我尝试使用 Conan 2,但我找不到任何关于从 Linux > Windows 与 Conan 2 交叉编译的有用文档。mingw 版本是 apt 的 10.3.0-14。

谁能看出我做错了什么?

cross-compiling libxml2 conan
© www.soinside.com 2019 - 2024. All rights reserved.