3

我正在尝试使用MXE和 cmake构建一个跨平台的 QT C++ 应用程序(Linux/Windows) 。我非常非常努力地用谷歌搜索,你不知道我的谷歌查询有多棒。此类查询。但:

问题:未定义的引用。

/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a(qregularexpression.o):qregularexpression.cpp:(.text+0x2b7): undefined reference to `pcre16_exec'

(以及许多其他此类)

解决方案:

cd ~/mxe && make pcre

然后添加到 CMakeFiles.txt:

ADD_LIBRARY(pcre STATIC IMPORTED)
SET_TARGET_PROPERTIES(pcre PROPERTIES IMPORTED_LOCATION /home/user/mxe/usr/i686-w64-mingw32.static/lib/libpcre16.a)
TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME} pcre)

最后一个问题:其他未定义的引用。

/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a(qbytearray.o):qbytearray.cpp:(.text+0x60a): undefined reference to `uncompress'
/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a(qbytearray.o):qbytearray.cpp:(.text+0x1a30): undefined reference to `compress2'
/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Gui.a(qharfbuzzng.o):qharfbuzzng.cpp:(.text+0x143e): undefined reference to `hb_font_funcs_set_glyph_v_origin_func'

但我不知道这个compresshb_font_funcs_set_glyph_v_origin_func来自哪个图书馆。我可以一个一个地用谷歌搜索它们,但它看起来像是石器时代的做法。从长远来看,我不想对每个交叉编译的项目都这样做。

问题:

如何在不阅读 qt 构建文件的情况下找到所需库的名称?有没有办法使用 cmake 或 make 输出依赖项(需要动态库)?

可能的解决方案:

  • 我知道我可以在二进制文件上使用ldd 。我需要的是链接时间ldd之类的东西。这可能吗?

  • 也许我可以使用 make(在 QT 构建阶段)来打印 QT 的依赖项。如果是这样,该怎么做?

UPD:发现

  • mxe 相关的几乎解决方案:

    usr/bin/i686-w64-mingw32.static-pkg-config --list-all | sort

    usr/bin/i686-w64-mingw32.static-pkg-config Qt5Widgets --libs

4

0 回答 0